Partage
  • Partager sur Facebook
  • Partager sur Twitter

Beug pour variable String

Sujet résolu
    18 octobre 2008 à 20:19:34

    Bonjour!
    Je vous explique: NetBeans 6.5 version bêta est un compileur. Je l'utilise.

    J'ai écris ce script:
    package cartedidentite;
    
    import java.util.Scanner;
    
    
    public class Main {
    
        
        public static void main(String[] args) {
    
        Scanner sc = new Scanner (System.in);
                   
    System.out.println ("\nVotre nom?");
    String nom = sc.nextLine ();
    System.out.print ("\n");
    
    System.out.println ("Votre prénom?");
    String prenom = sc.nextLine();
    System.out.print ("\n");
    
    System.out.println ("Votre âge?");
    byte age = sc.nextByte();
    System.out.print ("\n");
    
    System.out.println ("Votre ville?");
    String habitation = sc.nextLine ();
    System.out.print ("\n");
    
    System.out.println ("Très bien. C'est fini. Vous vous nommez donc " + nom + " " + prenom + " ,votre âge est de " + age + " ans et vous habitez à " + habitation + ".\n");
    
        }
    
    }
    


    Il beug au niveau de la ville: en fait, il passe carrément la demande du nom de la ville, pour aller à la concaténation. Évidemment, puisque l'utilisateur n'a même pas pu entrer de nom pour la ville, la concaténation ne contient pas de nom de ville...

    Que se passe-t-il ? Pourquoi cela beug-t-il?
    • Partager sur Facebook
    • Partager sur Twitter
      18 octobre 2008 à 20:27:59

      Citation : dodvege

      System.out.println ("Votre ville?");
      String habitation = sc.nextLine ();
      System.out.print ("\n");
      


      Utilise Le "sc.next()" !
      • Partager sur Facebook
      • Partager sur Twitter
        18 octobre 2008 à 20:29:38

        pas le "sc.nextLine()"?
        Quelle est la différence? (à part qu'il y a "Line" qui manque à l'un des deux?
        • Partager sur Facebook
        • Partager sur Twitter
          18 octobre 2008 à 20:32:29

          Bonsoir, ton problème est simple.

          Imagine que tu entres que tu as 12 ans.
          Tu entres : 12 + RETOUR CHARIOT

          ton nextByte() prends alors le 12 et laisse le RETOUR CHARIOT de coté car ça ne l'intéresse pas.

          Derrière tu fait un nextLine() qui lui lit l'entrée standard.
          Il voit un retour chariot qui traine et donc considère que la réponse a été donnée.

          une solution a ton problème :

          import java.util.Scanner;
          
          public class Main 
          {
              public static void main(String[] args) 
              {
          	    Scanner sc = new Scanner (System.in);
          	               
          		System.out.println ("\nVotre nom?");
          		String nom = sc.nextLine ();
          		System.out.print ("\n");
          		
          		System.out.println ("Votre prénom?");
          		String prenom = sc.nextLine();
          		System.out.print ("\n");
          		
          		System.out.println ("Votre âge?");
          		byte age = sc.nextByte();
          
                          // ON RETIRE LE RETOUR CHARIOT QUI TRAINE
          		sc.nextLine();
          
          		System.out.print ("\n");
          		
          		System.out.println ("Votre ville?");
          		String habitation = sc.nextLine ();
          		System.out.print ("\n");
          		
          		System.out.println ("Très bien. C'est fini. Vous vous nommez donc " + nom + " " + prenom + " ,votre âge est de " + age + " ans et vous habitez à " + habitation + ".\n");
              }
          }
          


          ou :

          import java.util.Scanner;
          
          public class Main 
          {
              public static void main(String[] args) 
              {
          	    Scanner sc = new Scanner (System.in);
          	               
          		System.out.println ("\nVotre nom?");
          		String nom = sc.nextLine ();
          		System.out.print ("\n");
          		
          		System.out.println ("Votre prénom?");
          		String prenom = sc.nextLine();
          		System.out.print ("\n");
          		
          		System.out.println ("Votre âge?");
          		byte age = Byte.parseByte(sc.nextLine());
          		System.out.print ("\n");
          		
          		System.out.println ("Votre ville?");
          		String habitation = sc.nextLine ();
          		System.out.print ("\n");
          		
          		System.out.println ("Très bien. C'est fini. Vous vous nommez donc " + nom + " " + prenom + " ,votre âge est de " + age + " ans et vous habitez à " + habitation + ".\n");
              }
          }
          



          • Partager sur Facebook
          • Partager sur Twitter
            18 octobre 2008 à 20:35:21

            Super! merci beaucoup! Tout marche ^^
            Promis, je retiendrais cette leçon :D
            (merci à toi aussi SEifJava2 :) , mais j'ai essayé ta méthode, ca ne marchait pas non plus^^... contrairement à celle de leonsulivan ;) )
            • Partager sur Facebook
            • Partager sur Twitter
              18 octobre 2008 à 20:42:09

              Normalement la solution de SeifJava2 doit fonctionner.
              C'est d'ailleurs celle qui est la plus élégante.
              • Partager sur Facebook
              • Partager sur Twitter
                18 octobre 2008 à 20:50:17

                Mais Pourquoi ?

                System.out.println ("\nVotre nom?");
                    String nom = sc.nextLine ();
                    System.out.print ("\n");
                
                    System.out.println ("Votre prénom?");
                    String prenom = sc.nextLine();
                    System.out.print ("\n");
                
                    System.out.println ("Votre âge?");
                    byte age = sc.nextByte();
                    System.out.print ("\n");
                //le next() au lieu de nextLine()
                    System.out.println ("Votre ville?");
                    String habitation = sc.next ();
                    System.out.print ("\n");
                
                    System.out.println ("Très bien. C'est fini. Vous vous nommez donc " + nom + " " + prenom + " ,votre âge est de " + age + " ans et vous habitez à " + habitation + ".\n");
                

                Bonne suite :)
                • Partager sur Facebook
                • Partager sur Twitter
                  19 octobre 2008 à 11:33:58

                  Merci ^^
                  Ah, en effet ta méthode marche :-° désolé, j'avais dû mal testé ^^
                  Au fait, qu'est-ce qu'un "retour chariot"? :o
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 octobre 2008 à 16:08:29

                    Oui c'est une bonne question je parle un peu "à l'ancienne" c'est tout simplement le caractère "retour à la ligne". ( Lorsqu'on appuie sur entrer quoi )
                    En fait ( bon c'est du hors sujet ... mais ça ne fait pas de mal ) sur les machines à écrire lorsqu'on appuyait sur le pendant de la touche ENTRER le chariot de la machine se trouvait projeté à son état initial.
                    D'où le retour chariot. ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 octobre 2008 à 16:55:30

                      Aaah, ok! merci^^
                      Un jour de plus où j'ai appris une nouvelle chose! ;)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Beug pour variable String

                      × 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