for-Schleife, while-Schleife Problem

  • Themenstarter Themenstarter spitfire78
  • Beginndatum Beginndatum
S

spitfire78

Gast
Hallo Freunde,

ich lerne gerade Java als erste Programmiersprache. Im Großen und Ganzen klappt es ganz gut. Jetzt bin ich jedoch auf ein Problem gestoßen, wo ich nicht mehr so recht weiter weiß.

Folgender Code:

Java:
import java.io.*;

public class Reader {

	public static void main(String[] args) {
		
		try {
			
			BufferedReader in = new BufferedReader(new FileReader("text.txt"));
			String zeile = null;
			//while ((zeile = in.readLine()) != null) {
			//	System.out.println(zeile);
			//}
			
			for (String zeile2 = in.readLine(); zeile2 != null;) {
				System.out.println(zeile2);
			}
			
			in.close();
			
		} catch (IOException e) {
			System.out.println(e.getMessage());
		} 
	}
}

Die Datei text.txt enthält 2 Zeile mit dem Inhalt "Zeile 1" und "Zeile2". Ich möchte die Datei nun auslesen und ausgeben. Mit der auskommentierten while-Schleife klappt das auch. Mit der for-Schleife gerate ich jedoch in eine Endlosschleife und verstehe nicht so ganz weshalb das so ist.

Ich würde mich über Hilfe freuen.

Grüße
spitfire78
 
So etwas per for Schleife umzusetzen ist eher unüblich.
Bei dir fehlt der Inkrement Schritt. zeile2 wird initialisiert, aber in den weiteren Schleifendurchläufen nichtmehr verändert, du landest also bei einer Endlosschleife.

Folgendes sollte gehen:
Java:
for (String zeile2 = in.readLine(); zeile2 != null; zeile2 = in.readLine()) {
    System.out.println(zeile2);
}
 
Ok. Das verstehe ich. Aber noch eine Frage:
  • Wo kommt denn dann die Inkrementierung bei der while-Schliefe hier? Dort gebe ich ja auch nichts an.
 
Die Bedingung wird doch bei jedem Schleifendurchlauf geprüft, also wird auch bei jedem Durchlauf einmal readLine() aufgerufen. Bei deiner for Schleife passiert das allerdings nicht.
 
Ah... jetzt fällt´s mir wie Schuppen von den Augen.

In der for-Schleife initialisiere ich den String
Java:
String zeile2 = in.readline();
und prüfe
Java:
zeile2 != 0;
in.readline() rufe ich allerdings nur 1 mal bei der Initialisierung auf und dann nie wieder, richtig? Dadurch gerate ich dann in die Endlosschleife.
 

Zurück
Oben