2012-12-05 63 views
14

我對Java很新,但正在通過Java的書:如何編程(第9版),並已達到了一個例子,我的生活中我無法弄清楚什麼問題是。NoSuchElementException與Java.Util.Scanner

這裏是在教科書的源代碼示例的(略)增加了的版本:

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 

我得到了「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: 

我明白,這可能是由於源代碼中與java.utilScanner類不兼容,但在推斷問題出在什麼方面我實在無法做到。

+0

您使用的是什麼SDK?我只是將你的代碼粘貼到Eclipse中,它似乎工作正常! – Curlystraw

+0

我正在Mac OS X上的TextMate中運行程序,但是當我從終端運行程序時,我沒有遇到任何錯誤。所以我認爲這是一個環境問題,而不是源代碼 – adaam

+1

@adaam你得到這個錯誤的原因是因爲TextMate終端模擬器不能(或沒有正確配置)接受輸入,我得到了同樣的問題Sublime Text 2. –

回答

4

NoSuchElementException由枚舉的nextElement方法拋出,指示枚舉中不再有元素。

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

如何:

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

我收到「變量number1可能未被初始化」,並且對於第二個變量也是如此。 – adaam

+0

這意味着你沒有初始化變量'number1'。 嘗試'int number1 = 0; int number2 = 0; ' – 2012-12-05 19:13:10

3

在給變量賦值之前,應該使用hasNextInt()

1

Integer#nextInt拋出NoSuchElementException - 如果輸入信息已耗盡

你應該檢查是否有與下一行Integer#hasNextLine

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

只是一個旁註,(我使用Mac OS X)我一直在嘗試從我的文本編輯器(TextMate-允許這種過程)中編譯和運行此源代碼。但是,儘管有您的建議,但我仍然遇到了NoSuchElementException。然而,當我將javac和java文件內的終端文件完美地運行時 - 爲什麼會這樣呢? – adaam