Endless loop in while Schleife

Ranger229

Neues Mitglied
Hallo,

ich habe folgendes Problem, ich sollte ein java Programm zu einem Windrad erstellen, bei dem der Neigungswinkel abhängig von verschiedenen Windgeschwindigkeiten einzustellen ist, dabei sind mir die Methoden

testPitch (optimaler Neigungswinkel = 0, Neigungswinkel zu klein =-1, Neigungswinkel zu groß =1)
decreasePitch = Verringert den Neigungswinkel um 1°
increasePitch = erhöht den Neigungswinkel um 1°
gegeben.

Daher habe ich versucht es mit einer While Schleife zu lösen

//while (!(testPitch==0)){

//if (testPitch>0){
//Windmill.decreasePitch(); //Neigungswinkel um 1° verringern
//}else{
//Windmill.increasePitch(); //Neigungswinkel um 1° erhöhen
//}
//}

dabei entsteht allderdings eine Endlosschleife und das Programm stürzt ab, defaultmäßig ist der Neigungswinkel auf 0° gesetzt.
vielleicht kann mir ja jemand helfen 🙂
 
Wir sehen hier jetzt erst einmal nur einen sehr kleinen Ausschnitt, der so erst einmal nicht viel besagt.

Was auffällt: In der Schleife greifst Du auf eine Variable testPitch zu. Du veränderst dann aber etwas mit Methoden. Wird da wirklich die Variable testPitch verändert? Das sieht zumindest schon einmal dubios aus.

Generell sollte man immer auf einer Ebene zugreifen. Also wenn Du auf einer Ebene bist, dass Du direkt mit der Variable testPitch arbeitest, dann solltest Du direkt mit der Variable arbeiten. Oder wenn es in Methoden ist, dann ohne Instanz (Oder ist Windmill eine Klasse?). Wenn Du auf eine Klasse / Instanz zugreifst, dann sollte der Zugriff konsequent sein, also etwas wie: while (Windmill.getPitch() != 0)
==> Das wäre dann deutlich, dass Du in der Schleife komplett mit WIndmill arbeitest.

Wobei die Frage ist: Wenn Du hier komplett etwas mit WIndmill machst: Warum ist das kein Code, der in Windmill selbst ist? Das wäre eine Aktivität der Windmill a.la. reset pitch oder so.
 
dabei entsteht allderdings eine Endlosschleife und das Programm stürzt ab, defaultmäßig ist der Neigungswinkel auf 0° gesetzt.
vielleicht kann mir ja jemand helfen 🙂
Ich würde das in eine Funktion auslagern.
Java:
public static void calibrateWindmill(){
    int testPitch = Windmill.testPitch();
    while( testPitch != 0 ){    
        if( testPitch == -1  )
            Windmill.increasePitch();
        else if( testPitch == 1 )
            Windmill.decreasePitch();
        testPitch = Windmill.testPitch();
    };
}
 
Zuletzt bearbeitet:
Für mich wär das noch eine klassische do-while Situation, da testPitch (sollte da vielleicht getPitch() stehen?) mindestens einmal aufgerufen werden soll. Aber das ist eher eine style-Frage.
 

Zurück
Oben