Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
wie programmiere ich "vielfaches einer natürlichen zahl
hallo,
hab grad angefangen mit java und hab da leider ehrlich gesagt noch nicht wirklich den besten durchblick. habe folgendes problem. ich hab 4 "ampeln", die nach ablauf von bestimmten phasen unterschiedlich geschaltet sein sollen. bei den phasen handelt es sich um 6 verschiedene, die je nachdem 3 bis 8 sekunden dauern. nun will ich eine methode schreiben, der ich eine bestimmte zeit(in sekunden) übergebe und die mir dann sagt in welcher phase ich bin. zb übergebe ich dieser methode den wert 222 und dann will ich die jeweilige phase haben, die gerade läuft
hab da an sowas gedacht
Code:
public int zeit(int s){
int i;//da will ich eigentlich schreiben, dass i eine beliebige natürliche zahl ist
if(s<=3 || (s>28*i && s<=31*i)){
return(1);
}
if((s>3 &&s<=11) || (s>31*i && s<=39*i)){
return(2);
}........
nun weiß ich jedoch nicht, wie ich "i" so deklariere, dass "i" eine beliebe natürliche zahl ist. dass heißt in dem beispiel: wenn "s" kleiner als 3 ist oder "s" größer als ein vielfaches von 28 und kleiner gleich ein vielfaches von 31, dann tue das und das....
muss man bestimmt irgentwie mit einer for oder while schleife machen oder? irgentwie fehlt mir da im moment die idee.....
Nee, das ist kein guter Lösungsansatz. Du kannst zwar alle darstellbaren ganzen Zahlen (int,long,etc...nicht die natürlichen Zahlen!) durchlaufen, aber das ist unschön und auch nicht die performanteste. Ich denke mal, dass du mit dem Modulo-Operator % (Rest einer Division) weiter kommst. Du steckst dir also deinen ersten Bereich ab. Der Rest der Division der Zeit durch die Summe alle Phasen zeigt dir dann, ob der Zeitwert in diesem Bereich liegt. Vorrausgesetzt deine Phasen laufen kontinuierlich und mit konstanter Länge. Erzähl doch nochmal genauer wie der Ablauf ist und vielleicht hilft dir das schonmal als Anregung.
Das was Prismapanda gesagt hat, dürfte schon ein geeigneter Ansatz sein. Angenommen der Ablauf ist
5 Sekunden Rot
1 Sekunden Rot+Gelb
6 Sekunden Grün
2 Sekunden Gelb
Dann dauert ein Zyklus insgesamt 14 Sekunden. Wenn man dann 222 als Eingabe bekommt, kann man ausrechnen, wo man sich innerhalb des aktuellen Zyklus befindet:
int aktuell = eingabe % zyklusDauer;
d.h. aktuell = 222 % 14 = 12
Dann könnte man ... vielleicht noch ein bißchen tricksen, um sich DAS auch noch zu sparen, aber ... am einfachsen: Durch alle Phasen gehen, und die Dauer von 'aktuell' abziehen, bis ein Wert <= 0 rauskommt.
aktuell = 12
- 5 Sekunden Rot = 7
- 1 Sekunden Rot+Gelb = 6
- 6 Sekunden Grün = 0
In dem Moment (bei 222) schaltet er gerade von Grün auf Gelb um.