Für mich unverständlicher Fehler

fleckdalm

Bekanntes Mitglied
Das ist die Aufgabenstellung:

Schreibe ein Programm, das Zufallszahlen zwischen -50 und 50 erzeugt. Die negativen und die positiven Zufallszahlen sollen getrennt summiert werden, bis der Betrag einer der beiden Summen ≥ 15000 ist. Das Programm zählt auch die Anzahl der erzeugten Zufallszahlen mit.

und das habe ich geschrieben:
Code:
 public void zuffalszahlen(){
        int zzp=0,zzn=0,zzpz=0,zznz=0;
        Random rand=new Random();
        while(zzp<=15000||zzn<=15000){
            int zz=rand.nextInt(102)-51;
            if (zz>=0){
                zzp+=zz;
                zzpz++;
            }else{
                zz=Math.abs(zz);
                zzn+=zz;
                zznz++;
            }
        }
        ausgabe=String.format("Positive Summe: %d\nAnzahl positive Zahlen: %d\nNegative Summe: %d\nAnzahl negative Zahlen: %d\n",zzp,zzpz,zzn,zznz);
    }
Aber aus irgendeinem Grund sind dann zum Schluss bei der ausgabe beide Zahlen über 1500 es steht aber es soll schon ausgegeben werden wenn 1 zahl über 15000 ist was ja eigentlich auch funktionieren sollte ich sehe jedenfalls keinen Fehler.
Was mache ich falsch?
mfg Fleckdalm
 
Ich würde sagen, da die Schleife durchrennt, wie zzp kleiner oder gleich 15000 ist, und du zz darin noch dazuaddierst, ist die Zahl, wenn zzp größer als 15000 - zz ist am Ende größer als 15000. Musst du wohl mit einer if vorher checken.

Tip: Versuche, möglichst Schreibfehler zu vermeiden und vergib vernünftige Variablennamen.
 
Hi fleckdalm,

Das ist die Aufgabenstellung:
Code:
 public void zuffalszahlen(){
        while(zzp<=15000||zzn<=15000){
        }
}

Schau Dir mal Deine Abbruchbedingung in der Schleife an. Sie steht im Moment auf ODER und besagt: Wiederhole solange zzp oder zzn kleiner als 15000 ist. Dies bedeutet umgekehrt: Brich ab, wenn keine der beiden Zahlen kleiner als 15000 ist. Aus diesem Grund sind am Ende bei Dir beide Zahlen größer. Du musst aber abbrechen, wenn eine der beiden Zahlen größer ist. Die Bedingung in Deiner Schleife muss hierzu false werden. Das erreichst Du durch eine UND-Verbindung [c]zzp<=15000 && zzn<=15000[/c].

Gruß Micha
 

Zurück
Oben