2012-10-11 65 views
5

我試圖用掃描儀獲取從鍵盤int,但我得到以下錯誤:與nextInt()掃描儀錯誤

Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Scanner.java:907) 
    at java.util.Scanner.next(Scanner.java:1530) 
    at java.util.Scanner.nextInt(Scanner.java:2160) 
    at java.util.Scanner.nextInt(Scanner.java:2119) 
    at TableReader.mainMenu(TableReader.java:122) 
    at TableReader.main(TableReader.java:76) 

這就是我。它與我的程序的其餘部分無關,我不明白爲什麼這不起作用。它在一個正在while循環中被調用的方法中聲明,如果有幫助的話。

// scan for selection 
    Scanner s = new Scanner(System.in); 
    int choice = s.nextInt();   // error occurs at this line 
    s.close(); 

我階梯通過與調試器和縮小了誤差降到:

已經由Java運行時環境中檢測到致命錯誤: SIGSEGV(0XB)在PC = 0xb6bdc8a8,PID = 5587, TID = 1828186944

JRE版本:7.0_07-B30 的Java VM:OpenJDK的服務器VM(23.2-B09混合模式Linux 86) 有問題的幀: V [libjvm.so + 0x4258a8] java_lang_String :: utf8_length(oopDesc *)+ 0x58

無法寫入核心轉儲。核心轉儲已被禁用。爲了使核心轉儲,嘗試「的ulimit -c無限」再次啓動Java

回答

8

您應該使用從ScannerhasNextXXXX()方法,以確保有一個整數準備好被讀取之前。

問題是你被稱爲nextInt()從流中讀取下一個整數的Scanner對象指向,如果沒有整數那裏讀(即,如果輸入信息已耗盡,那麼你將看到NoSuchElementException

從JavaDoc中,該nextInt()方法將拋出這些異常在這些條件下:

  • InputMismatchException - 如果下一個標記不匹配整數 正則表達式,或者超出範圍
  • NoSuchElementException - 如果輸入信息已耗盡
  • IllegalStateException - 如果此掃描器已關閉

可以解決這個問題很容易地使用hasNextInt()方法:

Scanner s = new Scanner(System.in); 
int choice = 0; 

if(s.hasNextInt()) 
{ 
    choice = s.nextInt(); 
} 

s.close(); 
+0

這把我變成一個無限循環的原因是什麼在括號內永遠不會被稱爲 – spatara

+0

@spatara是的,它會檢查掃描器指向的下一個項是否可以成功轉換爲整數,如果可以,則'hasNextInt()'將返回true,否則將會返回true返回false。 –

+0

我只是從鍵盤讀取,沒有nextInt當方法被稱爲 – spatara