为什么我收到此扫描仪错误?

时间:2017-02-17 00:43:20

标签: java java.util.scanner

我正在使用2个扫描仪来读取文件。一个人用

抓住第一行和第二行(因为我需要其他东西)
int a = fileScanner.nextInt();
fileScanner.nextLine();
int b = fileScanner.nextInt();
fileScanner.nextLine();

然后我逐行抓取文件的其余部分,并将一行发送到另一个类。

    while( fileScanner.hasNextLine() ){
        line = fileScanner.nextLine();
        NameRecord current = new NameRecord (line, startYear, decades);
        names.add(current);
    }

(忽略其余代码。) 然后,我接受了第一行的Word,然后剩下的是我需要存储在数组中的数字,所以我使用它:

Scanner lineSc = new Scanner(line);
    dataName = lineSc.next();
    for (int i = 0; i < decades; i++) {
        yearData[i] = Integer.parseInt(lineSc.next());
    }
    lineSc.close();

但最后,我收到了这个错误:

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at NameRecord.<init>(NameRecord.java:36)
at Names.<init>(Names.java:34)
at NameSurfer.simpleTest(NameSurfer.java:176)
at NameSurfer.main(NameSurfer.java:202)

我做错了什么?

1 个答案:

答案 0 :(得分:1)

因为在行

yearData[i] = Integer.parseInt(lineSc.next());

您在行next()中调用next()后实际致电dataName = lineSc.next(); 因此,在文件末尾,当实际上没有更多数据时,您会尝试读取一个额外的数据。

decades变量&#39; value大于您尝试读取的行的实际长度,而其长度必须为lineSc.length()-1或更短。