web-dev-qa-db-fra.com

NoSuchElementException avec Java.Util.Scanner

Je suis très nouveau sur Java, mais je suis en train de lire le livre Java: Comment programmer (neuvième édition) et suis parvenu à un exemple où, pour la vie de moi, je ne peux pas comprendre le problème.

Voici une version (légèrement) augmentée de l'exemple de code source dans le manuel:

import Java.util.Scanner;
public class Addition {
  public static void main(String[] args) {
    // creates a scanner to obtain input from a command window

    Scanner input = new Scanner(System.in);

    int number1; // first number to add
    int number2; // second number to add
    int sum; // sum of 1 & 2

    System.out.print("Enter First Integer: "); // Prompt
    number1 = input.nextInt(); // reads first number inputted by user

    System.out.print("Enter Second Integer: "); // Prompt 2 
    number2 = input.nextInt(); // reads second number from user

    sum = number1 + number2; // addition takes place, then stores the total of the two numbers in sum

    System.out.printf( "Sum is %d\n", sum ); // displays the sum on screen
  } // end method main
} // end class Addition

Je reçois l'erreur 'NoSuchElementException':

Exception in thread "main" Java.util.NoSuchElementException
at Java.util.Scanner.throwFor(Scanner.Java:838)
at Java.util.Scanner.next(Scanner.Java:1461)
at Java.util.Scanner.nextInt(Scanner.Java:2091)
at Java.util.Scanner.nextInt(Scanner.Java:2050)
at Addition.main(Addition.Java:16)
Enter First Integer:

Je comprends que cela est probablement dû à quelque chose dans le code source incompatible avec la classe Scanner de Java.util, mais je ne peux vraiment pas en dire plus pour en déduire quel est le problème.

15
adaam

NoSuchElementExceptionLancé par la méthode nextElement d'une énumération pour indiquer qu'il n'y a plus d'éléments dans l'énumération.

http://docs.Oracle.com/javase/7/docs/api/Java/util/NoSuchElementException.html

Que dis-tu de ça : 

if(input.hasNextInt() )
     number1 = input.nextInt(); // if there is another number  
else 
     number1 = 0; // nothing added in the input 
5
user813853

NoSuchElementException sera lancé s'il n'y a plus de jetons disponibles . Cela est dû à l'appel de nextInt() sans vérifier s'il existe un entier disponible . Pour éviter que cela ne se produise, vous pouvez envisager d'utiliser hasNextInt() pour vérifier si d'autres jetons sont disponibles.

3
Terry Li

Vous devez utiliser hasNextInt() avant d’attribuer une valeur à une variable.

3
Addict

Integer#nextInt jette NoSuchElementException - si l'entrée est épuisée

Vous devriez vérifier s'il y a une prochaine ligne avec Integer#hasNextLine

if(sc.hasNextLine()){
    number1=sc.nextInt();
}
1

Vous devez ajouter input.close () à la fin ...

0
Kaushal Vyas 007