Algorithme " condition"

Résolu
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

  1. Modérateur
    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.
    1. 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 :/
    2. Modérateur
      "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");
      }
    3. Merci , Mais lorsque des instructions suivent une condition , les accolades ne sont pas nécessaires et par conséquent elles deviennent facultatives non ?
    4. Modérateur
      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
    5. Ahh d'accord merci !