Programm dreht extra Schleife, warum?

CodeIt

Aktives Mitglied
Hallo, ich schreib einen Code in welchem zwei verschachtelte While-Schleifen vorkommen.
Die äußere While-Schleife soll beendet werden sobald die Variable change = false ist.
change wird genau dann auf false gesetzt, wenn keine Änderungen mehr an hash vorgenommen werden. Die while-Schleife bricht auch ab, jedoch dreht sie vorher noch eine Extra-Runde.
Code:
        while(change){   
            hash2.putAll(hash);          
            change = false;
           
            Vector<Node> vec = new Vector<>();
            for(int i=0; i < nodes.length; i++){
                vec.addElement(nodes[i]);
            }
            Random rand = new Random();           
            Node nodeElement;
            while (vec.size() > 0){
            ........//diverser Code in welchem hash evtl. geändert wird 
            }          
          
            if(!hash.equals(hash2)){               
                change = true;
            }else{              
                change = false;
            }             
        }       
  }

Kann mir jemand weiterhelfen. Ich vermute dass das ein typischer Anfängerfehler ist.
Vielen Dank
 
Wieso brichst du die Schleife nicht ab, wenn change == false?

Das Ausführen einer Schleife kann durch bestimmte Schlüsselwörter (continue) unterbrochen/abgebrochen werden.

Break geht natürlich auch. Ich weiß jetzt nicht genau was du machen möchtest.
 
selbst wenn ich break eingebe, wenn change == false ist, bricht die Schleife nicht sofort ab, sondern
dreht vorher noch eine extra Runde.
In hash wird der aktuelle Zustand eines Netzwerks gespeichert und in hash2 der vorherige Zustand des Netzwerks. Während eines Durchlaufs der inneren While-Schleife kann sich das Netzwerk ändern, muss aber nicht. Je nach dem ob eine Änderung durchgeführt wird, soll change eben true oder false sein.
 
Prüfe doch mal bitte mit einen paar System.out.println was so in deinem Code passiert.

Die equals Methode in HashMap prüft zwar ob die Maps übereinstimmen aber ich weiß nicht wie der Value (Node) überprüft wird.

Schnelle Abhilfe schafft da ein Debugging für Arme (System.out.println) an den neuralgischen Punkten.
 

Neue Themen


Zurück
Oben