2013-04-17 81 views
0

我寫了使用java掃描儀讀取整數的方法。該方法在關閉掃描儀之前正常工作,但是當我嘗試關閉掃描儀時,程序在第一次掃描時總是崩潰。在java中使掃描儀正常關閉的問題

有沒有人知道這個代碼有什麼問題?

private int SINT() 
{ 
    System.out.println("Integer"); 
    Scanner scan = new Scanner(System.in); 
    int p = 0; 
    try 
    { 
     p = scan.nextInt(); 
    } 
    catch(Exception e) 
    { 
     System.out.println("Not integer"); 
    } 
    scan.close(); 
    return p; 
} 
+0

你明白IllegalStateException異常?請粘貼錯誤的堆棧跟蹤。 –

+2

「程序在第一次掃描期間總是崩潰」是什麼意思? – Smit

+0

原因可能是它無法掃描整數值。在直接調用scan.nextInt之前,始終使用scan.hasNextInt()。 –

回答

3

您總是可以在Java 1.7中的try-w/resources塊中創建Scanner。由於它實現了AutoClosable接口,因此可以省略scan.close()

int p = 0; 
try (Scanner scan = new Scanner(System.in)) 
{ 
    p = scan.nextInt(); 
} 
catch (Exception e) 
{ 
    System.out.println("Not integer"); 
} 
return p; 
1

java.util.NoSuchElementException在java.util.Scanner.throwFor(未知 來源)

當您試圖讀取輸入令牌時有ISN」你的異常造成的任何

所以,當你撥打next,那麼你應該檢查掃描儀是否有一個。

像這樣:

if(scan.hasNextInt()) 
p =scan.nextInt(); 
+0

是的,這也是明智的! –