我最近才开始学习java,对扫描仪和一般输入非常困惑。对于这个例子,我的输出正是它需要的,但我得到了一个奇怪的错误消息,这意味着什么,我的错误是什么?
如果代码看起来非常杂乱无章,很抱歉,但这是我第一次使用这么长的代码
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a = sc.next();
String b = sc.next();
String c = sc.next();
String d = sc.next();
String e = sc.next();
String f = sc.next();
String g = sc.next();
String h = sc.next();
String i = sc.next();
String j = sc.next();
String k = sc.next();
String l = sc.next();
String m = sc.next();
String n = sc.next();
String o = sc.next();
String p = sc.next();
System.out.println(h);
System.out.println(g);
System.out.println(f);
System.out.println(e);
System.out.println(d);
System.out.println(c);
System.out.println(b);
System.out.println(a);
System.out.println(p);
System.out.println(o);
System.out.println(n);
System.out.println(m);
System.out.println(l);
System.out.println(k);
System.out.println(j);
System.out.println(i);
}
}
错误消息:
Failed test #1 of 3. Runtime error
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1478)
at Main.main(Main.java:15)
在第1个测试(共3个测试(中,可能没有任何元素在点传递给程序。
您应该检查,在访问下一个元素之前调用hasNext()
方法:
if (sc.hasNext()) {
value = sc.next();
}
来自Java官方文档:
投掷:NoSuchElementException-如果没有更多的代币可用
此异常意味着,在调用sc.next()
方法时,没有可从输入中读取的Scanner
值。
所以,您正在尝试读取比输入流更多的项目。Scanner
具有返回boolean
以指示流中是否还有要读取的内容的方法hasNext()
。
你可以重写你的例子,像这样:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
System.out.println(sc.next());
}
}
此代码将读取与输入流一样多的值,并将它们打印到控制台。