[java] for schleife mit treu/false

abraxus14

Cadet 4th Year
Dabei seit
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.
 

antred

Lt. Commander
Dabei seit
Juni 2010
Beiträge
1.288
for ( boolean i=true; i!=false; i = !i)
System.out.println(i);
 
Zuletzt bearbeitet:

CoolHandLuke

Lt. Commander
Dabei seit
März 2008
Beiträge
1.634
wie wäre es mit:

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


Dafür braucht man doch keine Schleife. ;-)
 

_Aqua_

Fleet Admiral
Dabei seit
Juni 2005
Beiträge
10.539
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:

CoolHandLuke

Lt. Commander
Dabei seit
März 2008
Beiträge
1.634
List<Boolean> blist = new ArrayList<Boolean>();
blist.add(Boolean.TRUE);
blist.add(Boolean.FALSE);

for (Boolean b : blist) System.out.println(b);
 

antred

Lt. Commander
Dabei seit
Juni 2010
Beiträge
1.288
Zitat von e-Laurin:
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?
 

Kagee

Lt. Junior Grade
Dabei seit
Feb. 2005
Beiträge
425
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
 

_Aqua_

Fleet Admiral
Dabei seit
Juni 2005
Beiträge
10.539
Zitat von antred:
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.
 

abraxus14

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Mai 2007
Beiträge
96
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.
 

_Aqua_

Fleet Admiral
Dabei seit
Juni 2005
Beiträge
10.539
Bei einer Wahrheitstafel hat man aber 2^n Zeilen. Die For-Schleife muss dann also durch die Anzahl der Atome durchzählen, statt Boolean durchzuzählen(?).
 
Zuletzt bearbeitet: (Typo: nicht n^2 sondern 2^n)

r0b0t

Ensign
Dabei seit
Juni 2010
Beiträge
240
@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:

_Aqua_

Fleet Admiral
Dabei seit
Juni 2005
Beiträge
10.539
Man muss bei einer For-Schleife eigentlich gar nichts in den Kopf schreiben.

Das hier ist erlaubt und funktioniert:
Code:
int i = 0;
for (;;) {
	i++;
	if (i == Integer.MAX_VALUE) break;
}
Wobei es so rum natürlich besser wäre:
Code:
for (int i = 0; i <= Integer.MAX_VALUE; i++)
 

abraxus14

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Mai 2007
Beiträge
96
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?
 

cx01

Lt. Junior Grade
Dabei seit
Mai 2010
Beiträge
258
Weil du im zweiten Teil geschrieben hast "j=false" und nicht "j!=false".
 

abraxus14

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Mai 2007
Beiträge
96
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.
 

cx01

Lt. Junior Grade
Dabei seit
Mai 2010
Beiträge
258
Die Schleife wird abgebrochen, wenn der zweite Teil unwahr ist. Da j True ist, und "j==false" dementsprechend unwahr, wird sie nie durchlaufen.
 
Top