Java 为什么会出现扫描仪错误?

Java 为什么会出现扫描仪错误?,java,java.util.scanner,Java,Java.util.scanner,我用两台扫描仪读取一个文件。一个抓住了第一和第二行,因为我需要他们的东西与一个 int a = fileScanner.nextInt(); fileScanner.nextLine(); int b = fileScanner.nextInt(); fileScanner.nextLine(); 然后我一行一行地抓取文件的其余部分,并将一行发送到另一个类 while( fileScanner.hasNextLine() ){ line = fileScanner.ne

我用两台扫描仪读取一个文件。一个抓住了第一和第二行,因为我需要他们的东西与一个

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);
    }
忽略代码的其余部分。 然后我取行中的第一个字,剩下的是我需要存储在数组中的数字,所以我使用这个:

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)
我做错了什么?

因为我在排队

yearData[i] = Integer.parseInt(lineSc.next());
实际上,在dataName=lineSc.next行中已调用next之后调用next; 所以在文件的末尾,当实际上并没有更多的数据时,您尝试读取一段额外的数据


“十年变量”的值大于您尝试读取的行的实际长度,而该行的长度必须为lineSc.length-1或更小

是的,因为第一个dataName=lineSc.next;获取行的第一个字符串,然后剩下的是与十年数相同的整数量。那么,十年变量的值大于您尝试读取的行的实际长度,而该行的长度必须为lineSc.length-1或更小。似乎您正在调用lineSc扫描仪的下一步,即使它不再有元素。您应该始终使用hasNext==>检查int i=0;我<十年&&lineSc.hasNext;我++