2017-08-31 11 views

Répondre

1

La réponse est assez simple:

Scanner#nextInt() lit l'entier, mais pas la nouvelle ligne (ENTER) l'utilisateur appuie pour soumettre l'entier.

Pour comprendre cela, vous devez savoir que tout ce que vous tapez sera écrit dans un tampon, à partir de laquelle les méthodes Scanner essaient de lire.


Regard l'exemple suivant:

System.out.println("Enter a number: "); 
int i = scanner.nextInt(); 
System.out.println("Enter a line: "); 
String l = scanner.nextLine(); 

Que se passera:

  • L'utilisateur voit Enter a number: et presseront 17 et ENTER. Le scanner lit le 17 mais laisse la nouvelle ligne du ENTER.
  • Le programme écrira Enter a line: mais le scanner lira le retour à la ligne du ENTER au lieu d'attendre la saisie.
+0

pourquoi cela ne se produit-il pas lorsque je soumets input.nextLine? – Incognelo

+1

'nextLine (...)' lit toutes les entrées jusqu'à ce qu'un caractère de retour à la ligne soit trouvé. Ce caractère de nouvelle ligne sera alors consommé – ParkerHalo

+0

merci pour l'aide – Incognelo

0

C'est purly une décision de conception, la raison nextInt() ne consomme pas le caractère de nouvelle ligne, est parce qu'il peut y avoir d'autres jetons qui ne sont pas encore analysés, il serait plus approprié de supposer qu'il n'y a plus rien dans la chaîne, et consomme le caractère newline.

Par exemple, vous avez l'entrée suivante
123 123 \n

Appel nextInt() entraînera la chaîne suivante gauche dans la mémoire tampon
123 \n

Appel nextInt() à nouveau,
\n

+0

merci pour l'aide – Incognelo