Mini Anfänger-Problem mit loops, statements und ;

CT9288

Mitglied
Hallo ihr lieben, ich komme mal wieder mit einem super simplen Problem, bei dem ich einfach nicht auf die Lösung komme:

Java:
public static void main(String[] args) {
      
        double Wachstum = 1;
        double Endwert = 999999;
      
        for(Wachstum > 0; Wachstum >= Endwert; Wachstum = Wachstum * 1,62){
      
            System.out.println(Wachstum);
          
            try{
                Thread.sleep(1000);
            }
            catch(InterruptedException ex){
            }
        }
      
    }

Warum wird mir der for-loop permanent als "not a statement" angezeigt? Ich habe die Variablen initialisiert, die Startbedingung festgelegt, die Endbedingung festgelegt und auch, um welchen Wert es sich erhöht. Ich verstehe es nicht. Hier ein weiteres Beispiel mit einem while-loop:

Java:
public static void main(String[] args) {
      
        boolean Wachstum = true;
        double MyxoWachstum = 1;
      
        while(Wachstum){
          
            MyxoWachstum = MyxoWachstum * 1,62;
          
            System.out.println(MyxoWachstum);
          
            try{
                Thread.sleep(1000);
            }
            catch(InterruptedException ex){
            }
        }
      
    }

1. Warum bekomme ich in NetBeans permanent bei "MyxoWachstum = MyxoWachstum * 1,62;" die Meldung ";" expected. Was ist denn falsch? Ein Semicolon steht doch da. Die Meldung verschwindet, wenn ich es so schreibe: "MyxoWachstum = MyxoWachstum;" dann aber ergibt das ganze keinen Sinn mehr und läuft so nicht.
2. Problem: Wenn ich das ganze, trotz Error ausführe, gibt er mir in der Konsole immer nur
1.0
1.0
1.0
1.0
1.0
aus, ohne, dass das Ergebnis mal mit 1,62 multipliziert wurde. Ich sehe einfach den Fehler nicht, und dabei ist es eine so simple aufgabe 0.o. Könnt ihr mir helfen?

Hintergrund: ich versuche einen Loop aufzusetzen, der mir eine fiktive Mikrobe (Myxomoebia) nach einer Sekunde wartezeit um den Faktor 1,62 vermehrt. Ich will das ganze später in einem JLabel anzeigen lassen, so ne kleine Lebens-Simulation. Aber nicht mal der loop läuft.
 
Zuletzt bearbeitet von einem Moderator:
Das erste "Argument" der for-schleife sollte keine Bedingung sein. Entweder du lässt es leer, wenn du Wachstum vorher initialiseren möchtest, oder du schreibst als erste Anweisung double Wachstum = 1;
Ein Komma benutzt man nicht als Dezimaltrennzeichen, sondern einen Punkt.
Also Wachstum = Wachstum * 1.62
Zudem: Java Code in Code-Tags, siehe Signatur

Edit: Zudem ist die Bedingung der for-Schleife falsch herum, die Bedingung sagt ja, dass die Schleife weiter ausgeführt werden soll, also Wachstum < Endwert sollte es sein.
 
Verzeihung wegen den fehlenden Code Tags.
Aber ich habe gleich das nächste problem, vielleicht liegt es ja mal nicht an mir o.0.
Aber ich habe bei Netbeans ein einfaches JFrame angelegt mit nichts weiterem, als einem einzigen JLabel. Und in eben diesem JLabel versuche ich krampfhaft einen for loop auszugeben. Es soll immer nur eine Zahl da stehen, die aktuelle, und nicht alle Folgezahlen hintereinander (ich schreibe das nur, weil ich dieses Problem in der Form am meisten im Internet gefunden habe...)

Java:
public void RunLoop(){
        int i;
        int x = 99;
        String y;
        System.out.println("yeah");
        for(i = 0; i < x; i++){
            System.out.println("doppel yeah");
            y = Integer.toString(i);
            this.Maine.setText(y);
                try{
                Thread.sleep(1000);
                }
                catch(InterruptedException ex){
                }
        }
    }

Das folgende Problem ist:
Ich habe RunLoop() überall in der Codestruktur plaziert und getestet, nirgendwo verändert sich der Inhalt des JLabels (habe den GUI JForm builder benutzt, nicht selbst programmiert). Und es ändert auch nichts, wenn ich das "this." weglasse, habe ich bereits versucht. Im Internet steht oft "ich bekomme immer nur die letzte Zahl des loops im Jlabel angezeigt", nope, nicht mal das bekomme ich.
Der loop selbst scheint zu funktionieren, ich habe ihn in einer Testdatei getestet, und System.out.println("doppel yeah") wird in regelmäßigen Abständen ausgegeben.
 
Mit dem Codefragment kann man nichts anfangen, weil man nicht weiß, wie es aufgerufen wird, was this.Maine ist, wo this.Maine hinzugefügt wird usw.

Das Problem "ich bekomme immer nur die letzte Zahl des loops im Jlabel angezeigt" ist ganz einfach, wenn auch technisch nicht ganz korrekt, zu erklären.

Stell Dir einfach folgendes vor: das UI hat einen Stapel mit Arbeitsaufträgen und führt ganz ordentlich einen nach dem anderen aus. Neue Arbeitsaufträge werden ganz unten im Stapel einsortiert.

In Deinem Arbeitsauftrag wird nun in einer Schleife z. B. JLabel#setText aufgerufen. Damit wird bei jedem Schleifendurchlauf ein neuen Arbeitsauftrag erzeugt (setze den Text), der ganz unten in den Stapel abgelegt wird. Folglich kann sich der Text nicht ändern, so lange das UI mit Deinem Arbeitsauftrag beschäftigt ist.
 
Problem: Wenn ich das ganze, trotz Error ausführe ...
Das kannst du gar nicht. Lies die Meldung mal genau durch, bevor du auf "Ok" klickst.
Da steht im Grunde "Du, da gibt's Fehler. Soll ich die vorige Version ausführen?"
D.h. die vorherige - erfolgreich kompilierte - Version wird ausgeführt. Die aktuelle - fehlerhafte - Version kann nicht ausgeführt werden.
 

Zurück
Oben