Werte werden nicht erhöht

Hallo zusammen,
Das Problem an sich ist eigentlich sehr einfach, aber ich finde den Fehler einfach nicht. Es geht um folgende Schleife:

            //Get a random Enemy
            randomEnemy = selectedEnemies.get(random.nextInt(selectedEnemies.size()));

            //Heal Player
            p.setHealth(100);

            //Reset rounds
            round = 0;

            //Fight
            while(p.getHealth() > 0 && randomEnemy.getHealth() > 0){
                damage = p.attack() - randomEnemy.attack();

                if(damage>0){
                    randomEnemy.changeHealth(-damage);
                }
                else if(damage <0){
                    p.changeHealth(damage);
                }

                round += 1;
            }


            if(p.getHealth()>0)
                totalWins += 1;

            //Add to average
            averageRounds += round;
            averageHealth += 100-p.getHealth();

            //Set Mins and Maxs
            if(p.getHealth()>maxHealth)
                maxHealth = p.getHealth();
            if(p.getHealth()<minHealth)
                minHealth = p.getHealth();

            if(round>maxRound)
                maxRound = round;
            if(round<minRound)
                minRound = round;
        }

Dabei ist “p” der Spieler. Die restlichen Bezeichnungen sollte selbsterklärend sein. Alle Zahlen sind int.

Folgendes passiert: Es sollen N Kämpfe zwischen dem Spieler und einem zufälligen Gegner durchlaufen werden. Dazu wähle ich jedesmal einen neuen Gegner, der Spieler erhält wieder volle Lebenspunkte und der Rundenzähler wird auf 0 gesetzt.

Die while-schleife stellt den Kampf dar: Solange beide noch mehr als 0 Leben haben, lasse sie kämpfen und ziehe vom Verlierer die Differenz ab. Anschließend erhöhe “round” um 1.

Das Problem: “round” wird oft gar nicht erhöht. auch der averageHealth Wert ist unter N bei N gewonnen Kämpfen. Weiß jemand warum die Werte nicht immer erhöht werden?

Ich hoffe einer von euch findet sofort was schief läuft, ich sitze seit ner halben Stunde dran und kapiers nicht…
Grüße,
TheAceOfSpades

*** Edit ***

Ich habe es zuerst mit N=10000 durchlaufen lassen. Wenn ich N kleiner mache dann erhalte ich korrekte Werte. Jetzt verstehe ich es erst recht nicht mehr…

Hast du das Ding mal debuggt?

Das Problem scheint ja hier zu sein:

              ```

wenn round nicht erhöht wird, wird die Schleife ja öfter abgebrochen / nicht durchlaufen, als du gedacht hast. ;)

Liegt es vll. daran, dass ein Gegner, der schon besiegt wurde erneut geladen wurde und direkt 0 HP hat? 
Weil soweit ich sehe wird die Zahl der Gegner nicht minimiert, wenn sie verlieren. Dh. ein Gegner könnte doppelt geladen werden und hätte 0 HP und so würde die zweite While Schleife (der Kampf) nicht aufgerufen werden.

Ansonsten würde ich deine einzelnen Teile in Methoden aufteilen, sodass das ganz ein bisschen übersichtlicher wird. Und dann kannst du dir die Kommentare sparen und die Methoden sprechen lassen ;)

Daran hatte ich gar nicht gedacht aber das könnte sicher das Problem sein.

Ich dachte die Gegner im Array bleiben von der Auswahl unberührt aber deine Ausführung ergibt natürlich Sinn. Das heißt ich muss statt den Gegner direkt aus dem Array zu ziehen einen neuen Gegner mit exakt den gleichen Werten erstellen…Juhu…

*** Edit ***

Das war wirklich der Fehler, es funktioniert jetzt, dankeschön :slight_smile: