2017-02-17 44 views
0

我使用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); 
    } 

(忽略此代码的其余部分) 然后我走线的第一个字,则其余的是数字我需要在一个数组来存储,所以我使用此:

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) 

我在做什么错?

+0

看来你正在为你的lineSc扫描器调用next,即使它没有元素了。你应该总是用hasNext检查==> for(int i = 0; i alfcope

回答

1

因为在该行

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

你居然叫next()next()在您尝试读取一个额外块中的数据时,有该文件的末尾已经堪称线dataName = lineSc.next(); 所以实际上没有更多数据。

decades变量的值大于您尝试读取的行的实际长度,而它的长度必须是lineSc.length()-1或更少。

+0

是的,因为第一个(dataName = lineSc.next();)将第一个String该线,其余的是与数十年相同的整数量。 –

+0

那么你的几十年变量的值大于你尝试阅读的行的实际长度,而它的长度必须是lineSc.length() - 1或更小。 –