2017-02-17 96 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或更小。 –