if/while, Ausgabe fehlerhaft!

Maxxx

Mitglied
Hallo zusammen,

ich habe einen kleinen Code geschrieben, die Ausgabe soll lauten a-b c-d

Allerdings wird das "a" nicht ausgegeben und ich komme hier nicht weiter, wo ist hier mein Denkfehler ???:L

Code:

Java:
class mm {
public static void main (String [] args){

int x = 3;
while (x > 0){

 x = x - 1; {
 System.out.print("-");
 }
 
if (x > 2){
System.out.print ("a");
}

if (x == 2){
System.out.print ("b c") ;
}

if (x == 1){
System.out.print ("d");
x = x -1;
}


} // while
} // main
} // class
 
x hat beim [c]if[/c] von a bereits den Wert 2.
Du solltest dein Programm richtig formatieren, dann ist es lesbar (und "Kommentare" wie [c]// while[/c] sind unnötig).
Du solltest die Standards einhalten, Klassen Camelcase mit beginnendem Grossbuchstabe, Methoden und Variablen mit beginnendem Kleinbuchstabe.
 
Wenn du das erste Mal in die while-Schleife gehst, dann wird deine Variable x sofort um 1 vermindert und hat dann den Wert 3. Somit geht er nicht in die if-Abfrage x > 2 sondern sofort in x == 2. Also startest du mit x = 4 oder du überlegst dir was anderes (sieht sowieso sehr verwirrend aus was du da machst 😀 ).
 
Hallo Maxx,


in die W-Schleife geht er rein wenn x größe 0 un da es am Anfang ja 3 ist, geht er rein.
Dann ist etwas unklar, was du von ihm willst.
In der Zeile 7 wird x auf 2 gesetzt.

Die geschweifelte Klammer (Begrenzen ein Block von Anweisungen) und somit schpielen hier kein Rolle, also führ er das aus und druckt - aus.

Dann geht er in die If Schleife und druckt a aus nur dann, wenn x>2 und x ist bereits 2 also geht er nicht rein und druckt kein "a" aus.

Ich hoffe es hilft dir weiter 🙂
 
Wenn du das erste Mal in die while-Schleife gehst, dann wird deine Variable x sofort um 1 vermindert und hat dann den Wert 3. Somit geht er nicht in die if-Abfrage x > 2 sondern sofort in x == 2. Also startest du mit x = 4 oder du überlegst dir was anderes (sieht sowieso sehr verwirrend aus was du da machst 😀 ).

Bin ja auch noch Anfänger:-D

Wenn ich x den Wert 4 zuteile habe ich zwar das a angezeigt, jedoch ein minus vor dem a das da nicht sein sollte.

Aber warum verwirrend, würdest du es anders schreiben?

Die "Kommentare" habe ich schlicht zu meinem besseren Verständnis eingefügt, ich denke ich werde sie bald nicht mehr brauchen.
 
Die "Kommentare" habe ich schlicht zu meinem besseren Verständnis eingefügt, ich denke ich werde sie bald nicht mehr brauchen.

Die brauchst du nicht mehr, sobald du deinen Code einrückst 😉 Ich bräuchte das bei diesem Code auch, und noch so benötigte ich lange Zeit, bis ich den Code durchschaute...

Verschieb einfach die Abfrage für a vor die Ausgabe von '-' und das Dekrementieren der Variable.
 
Obwohl es schon gesagt wurde, möchte auch ich Dir dringend raten, den Quelltext ordentlich zu formatieren und sich an Konventionen zu halten. Auch wenn es jetzt vielleicht unwichtig scheint: später ist es unglaublich wichtig!

Klassennamen fangen mit Großbuchstaben an (so wie beispielsweise auch String). Ansonsten immer auf die Ebene (Einrückungen!) achten. Sonst ist Dein Programm recht verwirrend, weil am Anfang der Schleife und unter einer Bedingung auch plötzlich mittendrin die Zählvariable verringert wird. Statt am Ende einfach noch einmal zusätzlich 1 abzuziehen, damit die Schleife beendet wird, ist es besser, die Schleife einfach eins weniger laufen zu lassen. Wenn Du sowieso schon etwas zählst, tut es auch eine einfache for-Schleife.

Java:
public class Mm {
    public static void main(String[] args) {
        for (int i = 3; i > 0; --i) {
            if (i > 2) {
                System.out.print("a-");
            } else if (i == 2) {
                System.out.print("b c");
            } else if (i == 1) {
            	System.out.print("-d");
            }
        }
    }
}

Natürlich funktioniert es auch mit einer while-Schleife.
 
Aber warum verwirrend, würdest du es anders schreiben?

Das kommt eben darauf an, was du damit machen willst. Wenn ich eine Ausgabe "a-b c-d" haben wollte, würde ich System.out.println("a-b c-d"); schreiben. 😉 Aber wahrscheinlich willst du es ja irgendwie dynamisch zusammenbauen. Da würde ich mir dann halt Schritt für Schritt überlegen, welche Teile ich auseinander haben will und die dann in der richtigen Reihenfolge ausführen bzw aneinanderhängen. 🙂
 
Die brauchst du nicht mehr, sobald du deinen Code einrückst 😉 Ich bräuchte das bei diesem Code auch, und noch so benötigte ich lange Zeit, bis ich den Code durchschaute...

Verschieb einfach die Abfrage für a vor die Ausgabe von '-' und das Dekrementieren der Variable.

Also habe ich einfach nur die falsche Reihenfolge gehabt, jetzt funktioniert es, danke 🙂
 
Obwohl es schon gesagt wurde, möchte auch ich Dir dringend raten, den Quelltext ordentlich zu formatieren und sich an Konventionen zu halten. Auch wenn es jetzt vielleicht unwichtig scheint: später ist es unglaublich wichtig!

Klassennamen fangen mit Großbuchstaben an (so wie beispielsweise auch String). Ansonsten immer auf die Ebene (Einrückungen!) achten. Sonst ist Dein Programm recht verwirrend, weil am Anfang der Schleife und unter einer Bedingung auch plötzlich mittendrin die Zählvariable verringert wird. Statt am Ende einfach noch einmal zusätzlich 1 abzuziehen, damit die Schleife beendet wird, ist es besser, die Schleife einfach eins weniger laufen zu lassen. Wenn Du sowieso schon etwas zählst, tut es auch eine einfache for-Schleife.

Java:
public class Mm {
    public static void main(String[] args) {
        for (int i = 3; i > 0; --i) {
            if (i > 2) {
                System.out.print("a-");
            } else if (i == 2) {
                System.out.print("b c");
            } else if (i == 1) {
            	System.out.print("-d");
            }
        }
    }
}

Natürlich funktioniert es auch mit einer while-Schleife.



Für dieses Beispiel ging es mir ausschliesslich um die Nutzung von "if/while", bei "for" bin ich noch nicht angelangt, werde mir dein Beispielcode aber mal zu Gemüte führen, danke🙂

Beim Format meines codes werde ich mich dann künftig wohl besser an die Standards halten.
 
Das kommt eben darauf an, was du damit machen willst. Wenn ich eine Ausgabe "a-b c-d" haben wollte, würde ich System.out.println("a-b c-d"); schreiben. 😉 Aber wahrscheinlich willst du es ja irgendwie dynamisch zusammenbauen. Da würde ich mir dann halt Schritt für Schritt überlegen, welche Teile ich auseinander haben will und die dann in der richtigen Reihenfolge ausführen bzw aneinanderhängen. 🙂

Naja zum lernen des Zusammenspiels erschien es mir halt der beste Weg🙂
 

Zurück
Oben