2012-04-08 9 views
0

ich etwas offensichtlich darüber, wie die verschiedenen Scanner Methoden funktionieren nicht fehlen darf, aber das wirklich macht keinen Sinn:Das Entfernen von println mit next() verursacht eine Endlosschleife?

dieser Code eine Endlosschleife verursacht:

Scanner valueScan = new Scanner(line); 
valueScan.useDelimiter(","); 
while(valueScan.hasNext()) 
{ 
count++; 
} 

während dieser Code gültig ist:

Scanner valueScan = new Scanner(line); 
valueScan.useDelimiter(","); 
while(valueScan.hasNext()) 
{ 
System.out.println("value token: " + valueScan.next()); 
cellCount++; 
} 

der von Oracle Dokumentation bin ich nicht sicher, ob es gilt, oder was es bedeutet: „Dieses Verfahren blockieren kann, während eine Eingabe wartet, zu scannen, auch wenn ein vorheriger Aufruf von hasNext() zurückgegeben wahr.“ (http ://machen cs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#next%28%29)

Antwort

4

Da hasNext entfernt nicht alles von den Scanner, so in Ihrem ersten Fall , Sie ändern nie seinen Zustand, daher die Endlosschleife. next extrahiert die Eingabe und ändert somit den Status der Scanner.

+0

Das macht Sinn, aber ich verstehe einfach nicht, warum das im Methodendetail nicht explizit erwähnt wird? Vielleicht ist es nur ich, aber wenn ich lese "Findet und gibt das nächste vollständige Token von diesem Scanner" klingt es wie eine Accessor-ähnliche Methode und nicht etwas, das irgendwelche Updates macht. – user1086516

+0

@ user1086516: Ah ok. 'hasNext' /' next' ist ein Standard-Java-Idiom für Iteratoren. –

0

Der Aufruf an valueScan.next() in Ihrem zweiten Beispiel macht den Scanner vorwärts bewegen. hasNext() prüft nur, ob ein nächstes Objekt in Ihrem Scanner vorhanden ist, aber nichts anderes tut, daher die Endlosschleife, wenn mindestens ein Objekt vorhanden ist.

0

Ohne die next() wird die Scanner nicht iterieren.

0

hasnext sagt Ihnen nur, wenn das nächste Element vorhanden ist und next zu diesem Element geht.

so bleibt es in Ihrer ersten Schleife beim ersten Element und sagt Ihnen, dass das zweite Element vorhanden ist und nichts mehr tut.

Verwandte Themen