2017-02-17 3 views
0

Ich benutze 2 Scanner, um eine Datei zu lesen. Man schnappt sich die erste und die zweite Linie (da ich sie für etwas anderes brauchen) mit einemWarum erhalte ich diesen Scannerfehler?

int a = fileScanner.nextInt(); 
fileScanner.nextLine(); 
int b = fileScanner.nextInt(); 
fileScanner.nextLine(); 

ich dann greifen, den Rest der Datei, Zeile für Zeile, und eine Linie zu einer anderen Klasse senden.

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

(. Ignoriere den Rest des Codes) Ich nehme dann das erste Wort der Zeile, dann ist der Rest-Nummern I in einem Array gespeichert werden müssen, so dass ich diese:

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

Aber am Ende habe ich diesen Fehler:

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) 

Was mache ich falsch?

+0

Es scheint, dass Sie als nächstes für Ihren Zeilenscanner anrufen, auch wenn er keine Elemente mehr hat. Du solltest immer mit hasNext ==> for (int i = 0; i alfcope

Antwort

1

Da in der Linie

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

Sie tatsächlich next() nach den next() bereits im dataName = lineSc.next(); So am Ende der Datei ein zusätzliches Stück der Daten an Sie versuchen, Zeile aufgerufen wurde rufen zu lesen, wenn es eigentlich keine Daten mehr.

Der Wert decades Variable ist größer als die tatsächliche Länge der Zeile, die Sie versuchen zu lesen, während sie lineSc.length()-1 oder weniger sein muss.

+0

Ja, weil der erste (dataName = lineSc.next();) den ersten String von die Linie, dann ist der Rest die gleiche Anzahl von ganzen Zahlen wie die Anzahl der Dekaden. –

+0

Gut, dann ist der Wert Ihrer Dekaden Variable größer als die tatsächliche Länge der Zeile, die Sie versuchen zu lesen, während es von Länge lineSc.length() - 1 oder weniger sein muss. –

Verwandte Themen