Operatoren Wenn Variable x den Wert y hat, dann mach was

Excess

Mitglied
Moin,

ich habe folgendes Problem.
Ein Wert wird um nicht konstante Werte erhöht.

z.B. kann die Variable einen Wert von 0,10, 50, 70, 120 usw. annehmen aber immer steigend!
Jetzt will ich immer, wenn der Wert um 'genau' 100 gestiegen ist eine andere Methode aufrufen.

Ich dachte zuerst an den Modulo Operator und dann sowas wie :

if( wert % 100 == 99){ dann rufe die Methode auf )

Problem : wenn der Wert von 90 um 20 erhöht wird, dann ist wird nicht der Wert 99 erreicht 🙁
110 % 100 = 10 // hat quasi die 100 % 100

Code:
        for (int i = 0; i < 110; i = i + 6) {
            if (i > 0 && i % 100 == 0)
               // hier kommt der nie hin, weil genau 100 nicht erreicht wird
                System.out.println("wieder um 100 erhöht");  
        }
 
Lass Dir mal den Schleifen-Zähler i ausgeben, dann siehst Du:
Code:
i: ...84 90 96 102 108
Wie soll Deine Bedingung denn dann jemals zutreffen? Du zählst ja immer 6 Schritte auf einmal hoch.
 
Was auch mmer du da vor hast, dass macht so irgendwie keinen Sinn. Vielleicht solltest du uns erklären was das Ziel deiner Aktion ist?
 
Du kannst den Anfangswert deiner Variablen in einer weiteren Variablen speichern, dann kannst du in jedem Durchlauf überprüfen, wie stark sie gestiegen ist und entsprechend reagieren.
Wir leben in einer Zeit, in dem Arbeitsspeicher selbstverständlich in gb angegeben wird, da juckt eine int Variable mehr oder weniger nicht wirklich 🙂
 
Lass Dir mal den Schleifen-Zähler i ausgeben, dann siehst Du:
Code:
i: ...84 90 96 102 108
Wie soll Deine Bedingung denn dann jemals zutreffen? Du zählst ja immer 6 Schritte auf einmal hoch.

Genau das ist ja da Problem 🙂
Beispielhaft habe ich mal um 6 erhöht, weil dann nicht genau 100 erreicht wird ... hätte auch 51 nehmen können.

Aber auch wenn nicht genau der Wert 100 erreicht wird, soll trotzdem beim erreichen/ überschreiten von jeweils 100 eine Aktion ausgeführt werden.

Was auch immer du da vor hast, dass macht so irgendwie keinen Sinn. Vielleicht solltest du uns erklären was das Ziel deiner Aktion ist?

... was das Ziel deiner Aktion ist? ... eine Aktion/Methode ausführen, wenn der Wert um 100 gestiegen ist.
Da der Wert aber nicht genau um 1 erhöht wird ( also auch nicht genau 100, 200, 300 usw. annehmen kann ) muss ich ja irgendwie feststellen, ob der Wert die 100er erreicht hat.
Wenn ich jetz einfach bei gehen würde, ist der Wert > 100, dann würde ja bei jedem Durchlauf eine Aktion ausgeführt werden, sobald der Wert einmal die 100 erreicht hat 😉
 
Wenn ich dich richtig verstanden habe:
Java:
int value;
//...
void increase(int value) {
    int alt = this.value;
    this.value += value;
    int neu = this.value;
    if( (neu/100-alt/100) > 0 ) {
        // ... mach was ... 
    }
}
 
if(neu-alt > 100)

Nein, so würde es nur triggern wenn die Differenz zwischen 2 Werte > 100 ist.

. So ganz habe ich nämlich immer noch nicht verstanden wann getriggert werden soll

Alle 100 soll getriggert werden, da aber die Erhöhung nicht konstant ist sondern variieren kann (mal wird um 1, mal um 5 oder sogar um 15 hoch gezählt) kann es passieren das von 99 direkt auf 114 hochgezählt wird.
Somit würde ein einfaches [c]if(neu%100==0)[/c] nicht immer triggern wenn gewünscht. Es soll immer dann getriggert werden wenn der nächste 100er überschritten wurde.
 
Erstmal vielen Dank für Eure Antworten!😉

@Joose : Genau !🙂

Also ich habe ein kleines Spiel geschrieben.

Wen es interessiert, kann mir gerne eine Nachricht schicken, weil ich hier nicht unbedingt Werbung in eigener Sache machen möchte 😉
Es ist ein Spiel für Android

Der Spieler soll eine Belohnung bekommen, wenn seine Punkte um x gestiegen sind ... also z.B. 100 oder 1000.

D.h. ich es müsste immer getriggert werden, wenn sich die Punktezahl um x erhöht hat.
Ich werde jetzt den Ansatz ( oder sogar Lösung ) von @stg probieren und hier dann noch mal eine Nachricht schreiben ob das funktioniert hat.
 
@Excess
Wenn es bei 100, 1000 etc getriggert werden soll, dann ist das "Triggern, wenn größer gleich x". Triggern, wenn es um einen best. Wert gestiegen ist, ist "Trigger wenn neu - alt >= 100". Das ist ein kleiner Unterschied.
 
Moin,

also noch mal vielen Dank an alle Beteiligten !
Es hat funktioniert dank der Lösung von @stg

int alt = this.points;
this.points = points + onTop;

if ((this.points / 1000 - alt / 1000) > 0) {
setShieldAvailable(true);
}

Wie das im Spiel aussieht, kann man sich auch gerne angucken und mir feedback geben.
auch kritik nehme ich gerne an, wenn sie konstruktiev ist 🙂

ballerfisch im google play store heißt das unglaubliche spiel !

Gruß
 

Neue Themen


Zurück
Oben