![](/img/trans.png)
[英]Closing a Scanner throws java.util.NoSuchElementException
[英]NoSuchElementException Java Scanner *not closing scanner*
我剛剛測試Java,並通過基本的Scanner交互遇到了此錯誤。
Value x:
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.nextDouble(Scanner.java:2456)
at HelloWorld.main(HelloWorld.java:10)
我的代碼是:
import java.util.Scanner;
import java.io.*;
public class HelloWorld{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
double x;
System.out.println("Value x: ");
x = input.nextDouble();
System.out.println(x);
}
}
您需要檢查是否有一個要讀取的double
精度字,最好也提取無效數據-
Scanner input = new Scanner(System.in);
double x;
System.out.println("Value x: ");
while (!input.hasNextDouble()) {
if (!input.hasNext()) {
System.err.println("no more input");
System.exit(1);
}
System.out.println(input.next() + ": is not a double, please enter a double");
}
x = input.nextDouble();
System.out.println(x);
我不確定您提供了什么輸入來獲取此錯誤,但是我可以想象,當您通過管道將其他輸入字符串傳輸到此程序時,或者在控制台中鍵入ctrl-z時,就會發生此錯誤。
無論如何,發生的事情是您沒有向掃描儀提供輸入。
嘗試使用.hasNext()
驗證輸入。
import java.util.Scanner;
import java.io.*;
public class HelloWorld{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
double x;
System.out.println("Value x: ");
if (input.hasNext()) {
x = input.nextDouble();
System.out.println(x);
} else {
System.out.println("You didn't supply a value for x...");
}
}
}
在線運行相同程序時: http : //www.jdoodle.com/
我有同樣的NoSuchElementException
建議下載 JDK 8並嘗試運行相同的程序。
在線編輯器的工作方式可能有所不同(在某些情況下),因此您將無法獲得理想的結果。
但是,在上面的鏈接中,如果您事先提供了stdin輸入,則可以正常工作。
在標准輸入中看起來像是一個問題。 嘗試將這條線放在掃描儀上方,以確保您可以閱讀標准輸入。 然后再次運行,輸入一些字母並檢查是否可以從標准輸入中讀取。
System.out.println((char)System.in.read());
如果該行也給出相同的異常,則說明標准輸入存在問題。 嘗試使用默認設置重新安裝JVM。
PS:您的代碼對我來說很好
問題是沒有輸入任何內容時,掃描程序會嘗試從輸入流中獲取數字。
解決此問題的方法是等待Scanner.hasNextDouble()為true,以便在輸入后嘗試讀取輸入的數字。
while(!input.hasNextDouble()) { }
x = input.nextDouble();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.