2013-01-23 49 views
1

我在執行我的程序時遇到錯誤。線程主java.util.no中的JAVA異常這樣的元素

我執行我的程序並在輸入文件中輸入數據。

輸入文件的內容

LIMIT 
2 
ADD 30 60 
MUL -60 60 

我如下得到一個異常錯誤。

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 Test.doLimit(Test.java:41) 
     at Test.checkResult(Test.java:24) 
     at Test.main(Test.java:15) 

我用Google搜索了一下,我相信String input = sc.next(); for循環內部應該會導致錯誤。 我可以知道如何解決此錯誤嗎?

我的代碼如下所示。

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    String input = sc.nextLine(); 
    checkResult(input); 
} 


public static void checkResult(String input) 
{ 
    if(input.equals("LIMIT")) 
    { 
     //do stuff 
     doLimit(); 
    } 
    else if(input.equals("SENT")) 
    { 
     //do stuff 

    } 
    else 
    { 
     //do stuff 

    } 
} 
public static void doLimit() 
{ 
    Scanner sc = new Scanner(System.in); 
    int numOfInput = sc.nextInt(); 
    int x,y; 
    for(int i = 0; i < numOfInput; i++) 
    { 
     String input = sc.next(); 
     x = sc.nextInt(); 
     y = sc.nextInt(); 

     if(input.equals("ADD")) 
     { 
      //add 

     } 
     else if(input.equals("SUB")) 
     { 
      //sub 

     } 
     else 
     { 
      //multiple 

     } 
    } 
} 
+0

向我們展示您的測試輸入。 – MrSmith42

+0

第41行的代碼是什麼? –

+2

您執行了哪些診斷步驟?你有沒有在調試器中完成這一步?你得到了什麼樣的numOfInput值?它是否設法讀取前兩個值? –

回答

1

你應該檢查是否有更多的輸入。您可以在堆棧跟蹤看到nextInt參與,如果你看一下SDK,你會看到,當

輸入exausted此異常被拋出。

反正你的問題就在這裏:

int numOfInput = sc.nextInt(); 

所以請確保您有有效的輸入要求前:

if (sc.hasNextInt()) { 
    . 
    . 
    . 
} 
0

如果通過輸入文件發送數據,你必須在Scanner()構造函數中提供file

您目前所做的是提供System.in

編輯:

而且,你要打開的文件掃描儀一次,並將一直使用它。在這種情況下,

1)您打開掃描儀並讀取第一行。

2)然後在doLimit函數中,再次打開掃描儀並讀取輸入文件的第一行,該行不是整數。

因此,錯誤。

0

掃描儀的默認分隔符是空格。但是,您計劃在前兩行中使用新行作爲分隔符的輸入,然後將空行和新行作爲首位。也許這就是問題所在。嘗試在一行中寫入所有內容,將空白分隔開。

相關問題