我正在嘗試解決一個競爭性編碼問題,當我在 eclipse 或命令提示符下執行它時它工作正常,但是當我在網站上上傳解決方案時它沒有執行并在我第一次使用的行拋出 noSuchElementException來自用戶的輸入。我已經添加了導致問題的代碼部分。我試圖在不同的在線編譯器上使用 java 8 編譯器版本執行它,但它仍然會拋出相同的錯誤。我也嘗試過使用 BufferedReader 但出于某種原因,代碼將 k 的值打印為 -1。import java.util.Scanner;public class Solution { public static void main(String[] args) { Scanner sc=new Scanner(System.in); if(!sc.hasNext()){ System.out.println("hasNext returns false"); } int k=sc.nextInt(); System.out.println(k); }}輸出:hasNext returns false Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:862) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at Solution.main(Solution.java:9)
3 回答

智慧大石
TA貢獻1946條經驗 獲得超3個贊
在這里你正在檢查 sc.hasNext() 并且它會打印“hasNext returns false”但是在這之后你再次得到 nextInt() 它不會在那里因為在在線編譯器中你無法在運行時傳遞參數。
嘗試這個,
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
if(!sc.hasNext()){
System.out.println("hasNext returns false");
} else {
int k=sc.nextInt();
System.out.println(k);
}
}

慕慕森
TA貢獻1856條經驗 獲得超17個贊
我認為如果您正在使用一些在線編譯器,您手頭就沒有標準輸入流。只需像這樣模擬您的輸入:
Scanner sc = new Scanner("42");
盡管您檢查過hasNext()
返回 false,但您仍在嘗試讀取導致異常的下一個 int。上面有一段代碼注釋java.util.Scanner.throwFor()
似乎證實了這一點:
// If we are at the end of input then NoSuchElement; // If there is still input left then InputMismatch
添加回答
舉報
0/150
提交
取消