[java] for schleife mit treu/false

abraxus14

Cadet 4th Year
Registriert
Mai 2007
Beiträge
96
Hallo Mitglieder,

ich würde gerne eine for schleife aufstellen, die erst true und dann false ausgibt.
Was ist an meiner Lösung falsch?

for ( boolean i=true; i!=false; !i)
System.out.println(i);

-der erste Eintrag soll doch den Starteintrag symbolisieren
-der zweite Eintrag soll das Schleifenende angeben
-der dritte Eintrag soll die Funktion von i sein

Ich möchte also zuerst mit i starten. Die Schleife soll dann i negieren und bei i=false die Schleife zum letzten Mal durchlaufen.

Für Hilfe wäre ich sehr dankbar.
 
for ( boolean i=true; i!=false; i = !i)
System.out.println(i);
 
Zuletzt bearbeitet:
wie wäre es mit:

System.out.println(true);
System.out.println(false);


Dafür braucht man doch keine Schleife. ;-)
 
Völlig falsche Syntax! for erlaubt keine Boolean-Variablen als Zählvariablen. Du musst den Umweg über eine der anderen Zahlvariablen gehen.

Code:
for (int i = 0; i < 2; i++) {
  if (i == 0) System.out.println(false);
  else System.out.println(true);
}

Edit: Ok, erlauben tut Java den Einsatz von Boolean schon, aber da kommt nix sinnvolles raus. Boolean speichert Wahrheitswerte und keine Zahlen.

Edit 2: Für kontinuierlichen Output:
Code:
for (int i = 0; i < Integer.MAX_VALUE; i++) {
	if ((i & 1) == 1) System.out.println(false);
	else System.out.println(true);
}
 
Zuletzt bearbeitet:
List<Boolean> blist = new ArrayList<Boolean>();
blist.add(Boolean.TRUE);
blist.add(Boolean.FALSE);

for (Boolean b : blist) System.out.println(b);
 
e-Laurin schrieb:
Völlig falsche Syntax! for erlaubt keine Boolean-Variablen als Zählvariablen. Du musst den Umweg über eine der anderen Zahlvariablen gehen.

Code:
for (int i = 0; i < 2; i++) {
  if (i = 0) System.out.println(false);
  else System.out.println(true);
}

Edit: Ok, erlauben tut Java den Einsatz von Boolean schon, aber da kommt nix sinnvolles raus. Boolean speichert Wahrheitswerte und keine Zahlen.

Moment mal, bist du sicher daß das

Code:
for ( boolean i=true; i!=false; i = !i)
{
    System.out.println(i); 
}

in Java nicht funktioniert? Wie sinnvoll das ist, darüber kann man streiten, aber die Sprache sollte das doch erlauben, oder?
 
dass musst du eine Fußgesteuerte Schleife nehmen. Was im moment passiert ist:

1.i wird auf true gesetzt
2.es wird geprüft, ob i!=false, Ergebnis: true
3. Schleifenrumpf wird ausgeführt (Ausgabe)
4. !i wird ausgeführt ( i ist immernoch true)
5.gehe zu 2.

also eine Enlosschleife. Der letzte Teil des for-Schleifenkopfes ist einfach Code, der bei vor jedem Durchlauf und jeder prüfung ausgeführt wird. Wenn du i verändern willst musst du schreiben
Code:
for(boolean i=true;i!=false;i=!i)

aber auch das macht keinen Sinn, denn dann wird die Schleife nur einmal ausgeführt, denn die Prüfung erfolgt vor Ausführen des Rumpfes.

so könnte es gehen:

Code:
boolean i = false;
do
{
i=!i;
System.out.println(i);
}while(i!=false);

Das macht aber auch nicht viel Sinn, denn die schleife wird nur 2x ausgeführt. Einfacher wäre doch
Code:
System.out.println(true);
System.out.println(false);

oder gehts hier ums prinzip?

edit:
ich bin zu langsam :D
 
antred schrieb:
Moment mal, bist du sicher daß das
// ...
in Java nicht funktioniert? Wie sinnvoll das ist, darüber kann man streiten, aber die Sprache sollte das doch erlauben, oder?
Ich hab's ausprobiert, es geht wirklich. Mich hat es interessiert, weil ich das nie probiert habe. Es ist ja auch eigentlich Quatsch, das überhaupt auf diese Art zu machen.
 
Kagee schrieb:
aber auch das macht keinen Sinn, denn dann wird die Schleife nur einmal ausgeführt, denn die Prüfung erfolgt vor Ausführen des Rumpfes.


Verdammt, da hat er natürlich Recht. :)
 
Dankeschön für die schnellen Antworten, euch allen.

Also deine Lösung(Kagee) funktioniert. Danke.
Ja es geht ums Prinzip bzw ich will eine Wahrheitstafel aufstellen und brauche dafür verschachtetle Schleifen mit true und false.
 
@e-Laurin:

Java ist es egal, was im 1. und 3. Teil des for steht, Hauptsache es ergibt eine expression:

for (double d = 81.0; d > 1.1; d = Math.sqrt(d)) {
System.out.println(d);
}

geht auch so:

double d = 81.0;
for (; d > 1.1; ) {
System.out.println(d);
d = Math.sqrt(d);
}

oder so (wobei hier x überhaupt keinen Einfluss auf den Ablauf der Schleife hat):

double d = 81.0;
for (int x=1; d > 1.1; x = x + x * 3) {
System.out.println(d);
d = Math.sqrt(d);
}
 
Zuletzt bearbeitet:
Danke nochmal für eure schnellen Antworten.

Kann mir mal einer erklären, warum bei folgender forschleife nichts ausgegeben wird?

for ( boolean j=true; j=false ;j=!j)
System.out.println(j);

Was ist denn daran falsch?
 
Weil du im zweiten Teil geschrieben hast "j=false" und nicht "j!=false".
 
Ja ich möchte aber den zweiten Teil(j=false) noch mit einbeziehen .
Möchte also , dass der schleifenrumpf mit dem wert j= false durchlaufen wird und dann abbricht.
 
Die Schleife wird abgebrochen, wenn der zweite Teil unwahr ist. Da j True ist, und "j==false" dementsprechend unwahr, wird sie nie durchlaufen.
 
Zurück
Oben