2016-09-29 52 views
2

這似乎是一個常見問題(多次提問),但我無法找到此行爲的解釋。下面的代碼工作在一個編譯器,但在另一個編譯器掃描儀next()爲某些在線編譯器拋出NoSuchElementException

Scanner s = new Scanner(System.in); 
    System.out.println("Enter name: "); 
    String name = s.next(); 
    System.out.println("Name is " + name); 

測試在https://www.compilejava.net/https://www.codechef.com/ide它拋出異常拋出Exception in thread "main" java.util.NoSuchElementException。但是,在一些編譯器上它工作正常。這種行爲是否有任何理由(如JDK中的更改等)?

+0

的可能的複製[我如何使用Java中的掃描儀類控制檯讀取輸入?](http://stackoverflow.com/questions/11871520/how-can-i -read-input-from-the-console-using-the-scanner-class-in-java) – px06

+2

我認爲問題在於,這些在線IDE不支持用戶輸入。 – Blobonat

回答

5

此異常被拋出,因爲枚舉中沒有更多元素。

參見the documentation

由Enumeration nextElement方法拋出,表明 有枚舉中沒有更多的元素。


一些網上的IDE不允許用戶輸入進去,而在這種情況下,當你嘗試讀取用戶輸入的異常將得到儘快拋出。

  1. 它適用於TutorialsPoint IDE,因爲它允許用戶輸入。
  2. 它不適用於codechefcompilejava IDE,因爲這些IDE不支持用戶輸入。

但是,在codechef上添加用戶輸入的次要方法。只需勾選Custom Input複選框並提供任何輸入。然後它會編譯。


另一個原因例外,即目前根本沒有被更多的用戶輸入,可以通過調用s.next(),只是檢查s.hasNext()看到掃描儀是否有另一個標記之前處理。

Scanner s = new Scanner(System.in); 
    System.out.print("Enter name: "); 
    String name = null; 
    if(s.hasNext()) 
     name = s.next(); 
    System.out.println("Name is " + name); 
1

根據rD。回答問題的另一個解決方案是捕捉異常:

Scanner s = new Scanner(System.in); 
System.out.print("Enter name: "); 
String name = ""; 
try { 
    name = s.next(); 
    System.out.println("Name is " + name); 
} catch (NoSuchElementException e) { 
    System.out.println("You have to enter a name"); 
} 
1

你應該在指定區域輸入您輸入它的在線集成開發環境中工作時。正如你給出的例子codechef有額外的輸入字段(即自定義輸入)。但是一些在線IDE不支持像第一個鏈接IDE那樣的自定義輸入。他們給錯誤。 (即java.util.NoSuchElementException

enter image description here

相關問題