2010-03-14 4 views
5

SRY à propos de mon anglais :)
Im nouveau à la programmation Java et moi avons un problème avec le scanner. J'ai besoin de lire un Int, montrer quelques trucs, puis lire une chaîne, donc j'utilise sc.nextInt(); montrez mes affaires showMenu(); puis essayez de lire une chaîne palabra = sc.nextLine();Problème avec Java Scanner sc.nextLine();

Quelqu'un m'a dit que je dois utiliser un sc.nextLine(); après sc.nextInt(); mais je ne comprends pas pourquoi vous devez le faire :(

Voici mon code:

public static void main(String[] args) { 
    // TODO code application logic here 
    Scanner sc = new Scanner(System.in); 
    int respuesta = 1; 

    showMenu(); 
    respuesta = sc.nextInt(); 
    sc.nextLine(); //Why is this line necessary for second scan to work? 

    switch (respuesta){ 
     case 1: 
      System.out.println("=== Palindromo ==="); 
      String palabra = sc.nextLine(); 
      if (esPalindromo(palabra) == true) 
       System.out.println("Es Palindromo"); 
      else 
       System.out.println("No es Palindromo"); 
     break; 
    } 


} 

Ty beaucoup pour votre temps et votre aide: D

Répondre

7

nextInt() lit seulement jusqu'à ce qu'il soit trouvé l'int et s'arrête ensuite

Vous devez faire nextLine() car le flux d'entrée a toujours un caractère de nouvelle ligne et peut-être d'autres données non int sur la ligne.Appelant nextLine() lit dans toutes les données qui restent, y compris l'entrée t L'utilisateur pressé entre entrer un int et entrer une chaîne.

+0

: O ty tellement, je me demandais à ce sujet pour trop de temps :) –

+0

La première fois que j'ai rencontré ce problème, il me perplexe aussi, mais une fois que vous savez pourquoi c'est logique! –

+0

est agréable de savoir que je ne suis pas le seul: D –

0

Lorsque vous entrez une valeur (si String, int, double, etc ...) et appuyez sur « entrer », un caractère de nouvelle ligne (aka '\n') sera ajouté à la fin de votre entrée. Donc, si vous entrez un int, sc.nextInt() ne lira que l'entier entré et laissera le '\n' derrière dans le tampon. Donc, le moyen de résoudre ce problème est d'ajouter un sc.nextLine() qui lira les restes et les jettera. C'est pourquoi vous devez avoir cette ligne de code dans votre programme.