Algorithme " condition"

Résolu/Fermé
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - Modifié par Jiko-java le 1/02/2017 à 04:17
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - 1 févr. 2017 à 20:47
Bonjour , " Une autoroute à péage est divisée en sections ayant une entrée et une sortie de section. Le prix à payer correspond aux nombre de sections parcourues.
La première section coûte 1 euro et les suivantes coûtent 50 centimes" .
Voici mon code Si quelqu'un peut m'aider à l'amélioré j'en serai ravis ! :
public class peage{

  public static java.util.Scanner scanner = new java.util.Scanner(System.in);
  public static void main(String[]args){
  
  System.out.println("Veuillez entré le point d'entree de la section");
  int entree = scanner.nextInt();
  
  System.out.println("Veuillez entré a présent le point de sortie");
  int sortie = scanner.nextInt();
  
  int distance = entree - sortie;
  
  System.out.println("Vous avez parcourue : " + distance + " section ");
  
  if(distance == 0){
  double total = 1;
  System.out.println("Le prix a payé est de : " + total);
  }
  
  else{
  double total = 1 + ((distance - 1 )*0.50); 
  System.out.println("Voici le total a payé : " + total);
  }


cependant une question (pourtant simple) me taraude supposons que l'entrée == sortie ---> distance = 0 , dans ce cas le prix a payé est-il de
1 euro , ou rien ? Merci d'avance :) .

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
1 févr. 2017 à 06:55
Bonjour,

Tu devrais séparer la partie calcul dans une méthode séparée, afin de ne pas la mélanger avec la partie Scanner/System.out.

"supposons que l'entrée == sortie ---> distance = 0"
C'est impossible, sur une autoroute la sortie est toujours avant l'entrée. Donc si tu entres tu ne peux ressortir qu'à la section d'après.
0
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
1 févr. 2017 à 17:41
D'accord merci C'est gentil, en relisant une partie d'un code je me suis rendu compte que j'ai encore du mal a interprété (simulé) un programme.

public class condition1{
 public static void main(String[] args) {
 int x = 4;
 int y = 1;
 System.out.print("1");
 if(a<6)
    if(b>2)
      System.out.print("2");
   else
      System.out.print("3");
 System.out.print("4");
 }
}


 
public class condition2{
 public static void main(String[] args) {
 int x = 4;
 int y = 1;
 System.out.print("1");
 if(a<6){
    if(b>2)
       System.out.print("2");
 }
 else
     System.out.print("3");
 System.out.print("4");
 }
}


j'ai du mal a comprendre la différence entre les 2 si ce n'est que les accolades et l’indentation , selon moi les 2 affiches 134 mais en le passant au debugger je me suis rendu compte qu'un d'entre eux affiche 14 et j'ai du mal a comprendre pourquoi :/
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
1 févr. 2017 à 19:27
"si ce n'est que les accolades et l’indentation"
Justement ça change tout, parce que dans le premier code le
else
est le contraire du
if(b>2)
alors que dans le deuxième c'est le contraire de
if(a<6)
...

if (a<6) {
    if(b>2) {
        System.out.print("2");
    } else {
        System.out.print("3");
    }
}

if(a<6) {
    if(b>2) {
        System.out.print("2");
    }
} else {
    System.out.print("3");
}
0
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
1 févr. 2017 à 20:11
Merci , Mais lorsque des instructions suivent une condition , les accolades ne sont pas nécessaires et par conséquent elles deviennent facultatives non ?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
1 févr. 2017 à 20:34
En effet, elles sont facultatives (s'il n'y a qu'une seule instruction), mais vu que tu avais du mal à comprendre le découpage, je les ai réécris avec les accolades.

Elles sont de toute façon "recommandées" même lorsqu'elles sont facultatives, notamment par les différents outils d'analyse de codes :

PMD : IfStmtsMustUseBraces, IfElseStmtsMustUseBraces
Sonar : S00121
0
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
1 févr. 2017 à 20:47
Ahh d'accord merci !
0