我刚刚测试了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);
}
}
答案 0 :(得分:0)
您需要检查是否有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);
答案 1 :(得分:0)
我不确定您提供什么输入来获取此错误,但我可以想象当您将其他输入字符串传递给此程序时,或者您在控制台中键入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...");
}
}
}
答案 2 :(得分:0)
在线运行相同的程序:http://www.jdoodle.com/
我得到了相同的NoSuchElementException
。建议Download JDK 8并尝试运行相同的程序。
在线编辑可能会以不同的方式工作(在某些情况下),因此您无法获得所需的结果。
但是,在上面的链接中,如果您事先给出stdin输入,它可以正常工作。
答案 3 :(得分:0)
看起来像标准输入中的问题。尝试将此线放在扫描仪上方,以确保您可以读取标准输入。然后再次运行键入一些字母并检查是否可以从标准输入读取。
System.out.println((char)System.in.read());
如果此行也提供相同的异常,则标准输入存在问题。尝试使用默认设置重新安装JVM。
PS:你的代码适用于我
答案 4 :(得分:0)
问题是当未输入任何内容时,扫描程序会尝试从输入流中获取数字。
解决此问题的方法是等待Scanner.hasNextDouble()为true,以便它尝试在输入输入数字后对其进行读取。
while(!input.hasNextDouble()) { }
x = input.nextDouble();