此错误消息是什么意思,我该如何解决该问题?

时间:2020-04-10 12:59:55

标签: java

我是最近才开始学习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)

2 个答案:

答案 0 :(得分:2)

在3的测试#1中,也许没有任何元素在那个点传递给您的程序。

在访问 next 元素之前,应检查,调用hasNext()方法:

if (sc.hasNext()) {
    value = sc.next();
}

来自官方Java documentation

抛出: NoSuchElementException-如果没有更多令牌可用

答案 1 :(得分:0)

此异常意味着,调用Scanner方法时,无法从输入中读取sc.next()的值。

因此,您尝试阅读的内容比输入流还多。 Scanner的方法hasNext()返回boolean,以指示流中是否还有要读取的内容。

您可以像这样重写示例:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    while (sc.hasNext()) {
       System.out.println(sc.next());
    }
}

此代码将读取与输入流一样多的值,并将它们打印到控制台。