J'ai rencontré un problème plutôt étrange avec l'entrée de Java Scanner. J'ai fait un programme de pratique qui lit d'abord un double en utilisant nextDouble()
, sort un texte trivial et utilise ensuite le même objet scanner pour obtenir une entrée de chaîne en utilisant nextLine()
.L'analyseur Java ignore l'entrée nextLine() mais pas la suivante()
Voici le code:
import java.util.Scanner;
public class UsrInput {
public static void main(String[] args) {
//example with user double input
Scanner reader = new Scanner(System.in);
System.out.println("Enter a number: ");
double input = reader.nextDouble();
if(input % 2 == 0){
System.out.println("The input was even");
}else if(input % 2 == 1){
System.out.println("The input was odd");
}else{
System.out.println("The input was not an integer");
}
//example with user string input
System.out.println("Verify by typing the word 'FooBar': ");
String input2 = reader.nextLine();
System.out.println("The string equal 'FooBar': " + input2.equals("FooBar"));
}
}
Maintenant, évidemment, mon intention est de demander une seconde entrée, et imprimer s'il est vrai ou faux que la input2 chaîne est égale à « foobar ». Cependant quand je cours ceci il saute la deuxième entrée et immédiatement me dit que ce n'est pas égal. Cependant si je change reader.nextLine()
à reader.next()
il fonctionne soudainement.
Il fonctionne aussi si je crée une nouvelle instance de scanner et d'utiliser reader2.nextLine()
Alors ma question est pourquoi est mon objet Scanner ne me demande pas de nouvelles entrées? Si j'imprime la valeur de "input2" c'est vide.
http://stackoverflow.com/questions/13102045/scanner- est-sauter-nextline-après-utiliser-next-nextint-ou-autre-nextfoo? rq = 1 –
C'est en effet le même problème (je ne pouvais pas le trouver dans la recherche), mais il me laisse toujours à me demander pourquoi le problème se produit avec nextLine() après nextDouble() mais pas avec next()? Est-ce que next() simlpy ignore le retour à la ligne dans le buffer> –