Partage
  • Partager sur Facebook
  • Partager sur Twitter

Appréciations sur mon code

Améliorations à faire ?

Sujet résolu
    19 octobre 2008 à 18:01:41

    Salut,
    j'ai créé un petit programme très simple en JAVA. Je suis débutant, donc j'aimerais savoir si ce code que j'ai tapé n'est pas trop long pour un si petit programme... ^^

    package testeannéelinotte;
    
    import java.util.Scanner;
    
    
    public class Main {
    
        
        public static void main(String[] args) {
    
            Scanner sc = new Scanner (System.in);
    
            //La réponse correcte:
            short reponse = 2005;
            byte validation = 1;
            short valeur = 0;
    
            //la question.
           System.out.println ("En quelle année le langage Linotte a-t-il été inventé?");
           valeur = sc.nextShort ();
    
    
                         while (validation == 1)
                    {               
                               
                              
                
                     if (valeur == reponse)
                    { 
                     System.out.println ("Bravo! Vous êtes trop fort!");
                       validation = 0;      
                    }
                 
                    while (valeur != reponse) 
                    {    
                             
                    
                        if (valeur < reponse)
                     {
                              System.out.println ("C'est plus récent!\n");
                  System.out.println ("En quelle année le langage Linotte a-t-il été inventé?");
           valeur = sc.nextShort ();
                         
              
                   validation = 0 ; 
                     }
    
    
                        else if (valeur > reponse)
                        {
                            System.out.println ("C'est plus vieux!\n");
                                System.out.println ("En quelle année le langage Linotte a-t-il été inventé?");
           valeur = sc.nextShort ();
                         
               if (valeur != reponse)
               {
                      validation = 1;
               }
                   validation = 0 ;   
                        }
                    }
           }
          }
          
    }
    


    Merci d'user d'un titre explicite à tes sujets
    • Partager sur Facebook
    • Partager sur Twitter
      19 octobre 2008 à 18:03:10

      tu t'es trompé de forum :S
      • Partager sur Facebook
      • Partager sur Twitter
        19 octobre 2008 à 18:08:21

        aaaah... en effet... mince... :s
        • Partager sur Facebook
        • Partager sur Twitter
          21 octobre 2008 à 3:12:25

          La première chose qui pique les yeux, c'est la présentation de ton code, on ne peut pas s'y retrouver.
          Tu codes vraiment comme ça ? Si oui, il y a de bonnes habitudes à prendre; si c'est le site qui déforme ta présentation alors sers-toi de l'aperçu final avant d'envoyer ton post pour tout remettre en orde.

          package testeannéelinotte;
          
          import java.util.Scanner;
          
          public class Main {
              
              public static void main(String[] args) {
          
                  Scanner sc = new Scanner (System.in);
          
                  //La réponse correcte:
                  short reponse = 2005;
                  byte validation = 1;
                  short valeur = 0;
          
                  //la question.
                  System.out.println ("En quelle année le langage Linotte a-t-il été inventé?");
                  valeur = sc.nextShort ();
          
                  while (validation == 1)
                  {               
                      if (valeur == reponse)
                      { 
                          System.out.println ("Bravo! Vous êtes trop fort!");
                          validation = 0;
                      }
                  
                      while (valeur != reponse) 
                      {    
                          if (valeur < reponse)
                          {
                              System.out.println ("C'est plus récent!\n");
                              System.out.println ("En quelle année le langage Linotte a-t-il été inventé?");
                              valeur = sc.nextShort ();
                              validation = 0 ; 
                          }
                          else if (valeur > reponse)
                          {
                              System.out.println ("C'est plus vieux!\n");
                              System.out.println ("En quelle année le langage Linotte a-t-il été inventé?");
                              valeur = sc.nextShort ();
          
                              if (valeur != reponse)
                              {
                                  validation = 1;
                              }
                              validation = 0 ;   
                          }
                      }
                  }
              }
          }
          


          Pour l'algorithme, il est en effet inutilement complexe et redondant.
          Tu as écris la façon dont le programme doit réagir en français ? Fais l'exercice, ça devrait te permettre de faire re-sortir directement ce dont tu as besoin et juste ce dont tu as besoin. Je te donne une piste : parmis toutes les boucles que tu as à ta disposition en Java, ce n'est pas forcément la boucle while() la plus adaptée ici.

          Petite remarque sur ton code actuel : validation mériterait d'être un boolean (mais dans la nouvelle version tu n'en auras pas besoin).

          Bon courage, et KISS ;)
          • Partager sur Facebook
          • Partager sur Twitter
            21 octobre 2008 à 21:25:30

            Hello !
            Les remarques de freecircus sont pertinentes.

            Il faut aussi que tu regardes ce qui se répète dans ton code.
            Premièrement :
            System.out.println ("En quelle année le langage Linotte a-t-il été inventé?");
            valeur = sc.nextShort ();
            

            Tu utilises ces 2 lignes 3 fois !

            De plus tu n'as pas besoin de la variable "validation" car tu l'utilises uniquement pour sortir de la boucle. Et il y a une méthode bien plus simple pour faire cela.
            Ta deuxième boucle while est elle aussi inutile.
            Je ne vois pas non plus la logique de ton test "else if (valeur > reponse)" : il comporte une erreur de logique.

            Voici donc une solution possible (mais attention elle n'est pas unique et sûrement pas la plus optimisée). Je te conseil tout de même d'essayer en premier par toi même en tenant compte des remarques de freecircus et moi-même.

            import java.util.Scanner;
            
            public class Main {
                
                public static void main(String[] args) {
            
                    Scanner sc = new Scanner(System.in);
                    short reponse = 2005;
                    short valeur = 0;
            
                    while(true) // boucle infinie
                    {
                        System.out.println("En quelle année le langage Linotte a-t-il été inventé ?");
                        valeur = sc.nextShort();
                     
                        if(valeur == reponse) { 
                            System.out.println("Bravo ! Vous êtes trop fort !");
                            break; // brise la boucle infinie et termine donc le programme
                        }  
                        else if(valeur < reponse) {
                            System.out.println("C'est plus récent !");
                        }
                        else if(valeur > reponse){
                            System.out.println("C'est plus vieux !");
                        }
                    }
                }
            }
            


            Attention dans ce code tu ne testes pas si la valeur entrée est bien un short (personnellement j'aurais mis des entiers, c'est plus simple ^^).

            Bonne chance :)
            Tarfaa
            • Partager sur Facebook
            • Partager sur Twitter
              22 octobre 2008 à 18:24:04

              Super! merci ^^...
              si l'utilisateur entre un chiffre décimal, le programme s'arrête en erreur...
              pour contrer le problème, il serait judicieux de mettre un "else" non?
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                22 octobre 2008 à 18:42:10

                Il serait mieux plutôt de catch l'exception lancée par Scanner.nextShort().
                • Partager sur Facebook
                • Partager sur Twitter
                  22 octobre 2008 à 19:11:44

                  Heum... c'est à dire? Je ne comprends pas... ^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 octobre 2008 à 22:45:29

                    Salut!

                    Concernant les exceptions, si tu es débutant ne te préoccupe pas trop de ça (ou si ça t'intéresse il y a des tutoriels sur le site !).

                    Pour le code de Tarfaa je ne trouve pas très joli d'utiliser un break et un while(true).

                    J'aurais gardé l'idée de la variable validation, en la remplaçant par un booléen (je l'ai appelé gagne qui signifie plus). Et pour contrer les problèmes de redondances, il existe la structure de do while qui est comme un while sauf que le test est à la fin.

                    import java.util.Scanner;
                    
                    public class Main {
                        
                        public static void main(String[] args) {
                    
                            Scanner sc = new Scanner(System.in);
                            short reponse = 2005;
                            short valeur = 0;
                            boolean gagne = false;   //variable de test  ~validation
                    
                            do // boucle do while, le while est à la fin
                            {
                                System.out.println("En quelle année le langage Linotte a-t-il été inventé ?");
                                valeur = sc.nextShort();
                             
                                if(valeur == reponse) { 
                                    System.out.println("Bravo ! Vous êtes trop fort !");
                                    gagne = true;  //on change alors la valeur de gagne
                                }  
                                else if(valeur < reponse) {
                                    System.out.println("C'est plus récent !");
                                }
                                else if(valeur > reponse){
                                    System.out.println("C'est plus vieux !");
                                }
                            }while(!gagne);  //on continue tant qu'on a pas gagné !
                        }
                    }
                    




                    Bonne chance à bientôt!
                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 octobre 2008 à 20:29:48

                      Très bien, merci pour tout et à tous! :)
                      Juste une chose qui n'est pas précisée dans le tutoriel de JAVA... peut-on créer une variable (de nombre) de type infini?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 octobre 2008 à 15:36:32

                        @Tarfaa> Ca doit partir d'une bonne intention, mais je ne suis pas sur (je suis en fait persuadé du contraire) que poster la soluce d'entrée soit très efficace, c'est si tentant de glisser sur le bouton secret..

                        @rwatriga> Je ne suis pas convaincu de l'idée de la variable validation, elle provoque un second test inutile (une fois pour afficher le message, une autre pour voir si on boucle encore). Je préfère ceci :

                        import java.util.Scanner;
                        
                        public class Main {
                            
                            public static void main(String[] args) {
                        
                                Scanner sc = new Scanner(System.in);
                                short reponse = 2005;
                                short valeur = 0;
                        
                                do // boucle do while, le while est à la fin
                                {
                                    System.out.println("En quelle année le langage Linotte a-t-il été inventé ?");
                                    valeur = sc.nextShort();
                                 
                                    if(valeur < reponse) {
                                        System.out.println("C'est plus récent !");
                                    }
                                    else if(valeur > reponse){
                                        System.out.println("C'est plus vieux !");
                                    }
                                }while(valeur != reponse);  //on continue tant qu'on a pas gagné !
                        
                                System.out.println("Bravo ! Vous êtes trop fort !");
                            }
                        }
                        


                        Citation :

                        peut-on créer une variable (de nombre) de type infini?


                        J'ai entendu parlé de la classe BigInteger mais jamais utilisé.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Appréciations sur mon code

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown