NoSuchElementException con Java.Util.Scanner

Sono molto nuovo a Java, ma sto lavorando attraverso il libro Java: Come programmare (nono ed.) E ho raggiunto un esempio in cui per la vita di me non riesco a capire quale sia il problema.

Ecco una versione (leggermente) aumentata dell’esempio del codice sorgente nel libro di testo:

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 

Ricevo l’errore “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: 

Capisco che questo è probabilmente dovuto a qualcosa nel codice sorgente che è incompatibile con la class Scanner di java.util , ma in realtà non riesco ad andare oltre in termini di dedurre il problema.

NoSuchElementException generata dal metodo nextElement di nextElement per indicare che non vi sono più elementi nell’enumerazione.

http://docs.oracle.com/javase/7/docs/api/java/util/NoSuchElementException.html

Cosa ne pensi di questo :

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

È necessario utilizzare hasNextInt() prima di assegnare il valore alla variabile.

NoSuchElementException verrà lanciata se non sono disponibili altri token . Ciò è causato dal nextInt() senza verificare se sono disponibili numeri interi . Per evitare che ciò accada, è ansible utilizzare hasNextInt() per verificare se sono disponibili altri token.

Integer#nextInt genera NoSuchElementException – se l’input è esaurito

Dovresti controllare se c’è una riga successiva con Integer#hasNextLine

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