2014-06-20 4 views
1

me semble avoir ce problème beaucoup, je ne peux pas sembler tout à fait de comprendre comment travailler scannersMon scanner demande une entrée deux fois

System.out.println("Please enter a number"); 
Scanner choice1 = new Scanner(System.in); 
int choiceH = choice1.nextInt(); 

while(!choice1.hasNextInt()){ 
    System.out.println("Please enter a number"); 
    choice1.next(); 
} 

Ce que je veux le code à faire est de demander un numéro et vérifiez si l'entrée est un nombre. Mon problème est qu'il demande deux fois le numéro et je ne sais pas pourquoi.

Répondre

0

Dans la ligne

Scanner choice1 = new Scanner(System.in); 

le tampon est vide. Lorsque vous atteignez la ligne

int choiceH = choice1.nextInt(); 

vous entrez un numéro, et vous appuyez sur Entrée. Après cela, le numéro sera stocké dans le tampon et sera consommé (le tampon sera à nouveau vide). Lorsque vous atteignez la ligne

while (!choice1.hasNextInt()) 

le programme vérifie s'il y a un int dans le tampon, mais à ce moment, il sera vide, donc hasNextInt retournera false. Donc, la condition sera true et le programme demandera à nouveau un int.

Comment pouvez-vous le résoudre? Vous pouvez supprimer le premier :

System.out.println("Please enter a number"); 
Scanner choice1 = new Scanner(System.in); 
int choiceH = -1; // some default value 

while (!choice1.hasNextInt()) { 
    System.out.println("Please enter a number"); 
    choice1.nextInt(); 
} 
0

Si cette ligne de code exécute avec succès:

int choiceH = choice1.nextInt(); 

Ensuite, l'utilisateur est entré dans une int et l'analyse syntaxique réussi. Il n'y a aucune raison de vérifier à nouveau hasNextInt().

Si l'utilisateur n'a pas entré un int, alors nextInt() lancera un InputMismatchException, et vous devriez simplement l'attraper et l'inviter à nouveau.

boolean succeeded = false; 
int choiceH = 0; 
Scanner choice1 = new Scanner(System.in); 

do { 
    try { 
     System.out.println("Please enter a number"); 
     choiceH = choice1.nextInt(); 
     succeeded = true; 
    } 
    catch(InputMismatchException e){ 
     choice1.next(); // User didn't enter a number; read and discard whatever was entered. 
    } 
} while(!succeeded); 
Questions connexes