Letzte Woche habt Ihr ja bereits eine Glühlampe
modellieren müssen, die wir nun um eine Dimmfunktion erweitern. Es soll mehrere Methoden
geben, die die Leuchtkraft verändern:
1. Die Helligkeit um genau einen Schritt erhöhen bzw. verringern.
2. Die Helligkeit um Zehnerschritte bis zur maximalen Leistung schrittweise anheben.
3. Die Helligkeit um Zehnerschritte schrittweise verringern.
Die einzelnen Werte sollen ausgegeben werden (nach dem Motto 10 Watt, 9 Watt, 8 Watt,…,
das ist zwar blöd, aber wenigstens sieht man etwas).
Angangs ist es so zu verstehen, dass die Operationen ohne weitere Werteeingabe bei Ausführung ihren Zweck erfüllen sollen (also einfach erhöhen / verringern). Aber wenn die einzelnen Werte ausgegeben werden sollen, dann klingt das wieder so, als ob man eine gewünschte Wattzahl eingeben kann und der Dimmer mittels Schleifen solange "dahin dimmt" bis die gewünschte Leuchtstärke erreicht ist.
Wie solls denn nun gemacht werden?
Genau einen Schritt erhöhen ist genau einen Schritt erhöhen. Was spricht dagegen, wenn die Lampe dabei quasi zu Debug-Zwecken auch noch den nun aktuellen Wert ausgibt? Von Wert eingeben steht da jedenfalls nichts.
ja stimmt, aber dann sind Schleifen da ja wohl nicht zu gebrauchen oder wie
Ach mist, böser Informatiker Fehler im Umgang mit Schleifen.
Ist mit doch bei 24338 Watt meine teure lila Pornolampe durchgeknallt.
Edit: Hilfe, es brennt wie brech ich das denn ab, wenn ich ne Endlosschleife produziert habe????
Und wieso …was…??
while (watt < watt + 10)
dimOneUp();
Strg Alt Entf schafft das bestimmt unter windows ;)
int oldwatt = watt;
while (watt < oldwatt + 10)
dimOneUp();
alles klar.
nur das abbrechen dachte ich geht vielleicht unter bluej, da ich blueJ mit meinem heiligen projekt nicht töten will. naja egal nu geit dat.
jetzt will ich noch dafür sorgen, dass die maximale leuchtstärke, die beim erzeugen der glühbirne festgelegt wird, nicht über schritten wird. da aber watt (meine leuchtstärke) sich ändert kann ich schlecht sagen, dass watt <= watt - 10 nicht überschritten werden soll. habs auch probiert, in dem ich final maxwatt genommen habe und beim erzeugen watt = maxwatt gesetzt wird, dass will er aber ncihtm da might not be defen bla bla.
(will meinen code nicht immer reinposten, sonst gibt dat noch ärger)
jetzt will ich noch dafür sorgen, dass die maximale leuchtstärke, die beim erzeugen der glühbirne festgelegt wird, nicht über schritten wird.
Fallunterscheidung.
da aber watt (meine leuchtstärke) sich ändert kann ich schlecht sagen, dass watt <= watt - 10 nicht überschritten werden soll.
Einfach ne Schleife von 0 bis 9 durchlaufen lassen.
Strg Alt Entf schafft das bestimmt unter windows ;)
int oldwatt = watt;
while (watt < oldwatt + 10)
dimOneUp();
Warum so umstaendlich und nicht einfach
for (int i=0; i<10; i++) dimOneUp();
(will meinen code nicht immer reinposten, sonst gibt dat noch ärger)
zumindest wollen wir die Fehlermeldungen Buchstabengetreu sehen. Und wenn Dein Code nicht funktioniert ist das, denke ich, schon ok.
Wenn Du eine maximale Wattzahl nicht ueberschreiten willst, dann solltest Du sie setzen.
class ... {
private int _maxwatt;
...
}
Bedenke: Mit den Variablennamen bezeichnest Du eine Speicherstelle. Eine solche kann immer nur einen Wert zur Zeit speichern. Deshalb werden Zeilen wie "watt < watt + 10" immer wahr sein. (Denk an Mathe. Fuer "watt" kannst Du nur einen Wert einsetzen, nicht zwei zu einem Zeitpunkt).
Deshalb die "oldwatt" Konstruktion.
Um nicht die _maxwatt zu ueberschreiten wuerd ich vorschlagen etwas zu konstuieren wie
for (i=0; i<10; i++ && watt<_maxwatt) ++watt;
MoKrates
Edit: Oeh. Anstelle von ++watt "dimOneUp()" benutzen, sorry.
for (i=0; i<10; i++ && watt<_maxwatt) ++watt;
Ich wuerde lieber schreiben
for (i=0; i<10 && watt<_maxwatt; i++) ++watt;
[img]
http://www.fb18.de/gfx/25.gif[/img]
for (i=0; i<10; i++ && watt<_maxwatt) ++watt;
Ich wuerde lieber schreiben
for (i=0; i<10 && watt<_maxwatt; i++) ++watt;
[img]http://www.fb18.de/gfx/25.gif[/img]
muss schon for (i=1; i<10 && watt<_maxwatt; i++) ++watt;
schreiben, da er sonst nur 9 mal zählt….
muss schon for (i=1; i<10 && watt<_maxwatt; i++) ++watt;
schreiben, da er sonst nur 9 mal zählt….
ich denke vorher war es schon ganz richtig, da er jetzt erst bei deiner Lösung nur 9 mal zählt. Also:
for(int i=0; i<10 && watt<_maxwatt;i++) watt=watt+1;
[img]
http://www.fb18.de/gfx/25.gif[/img]
Zum Abbrechen ohne die finale Geierkralle:
Wenn BlueJ Code ablaufen läßt, wird dieser graue Balken auf der linken Seite rot. Klickt man darauf, wird ein einfacher Debugger geöffnet (dauert etwas, da er ja gleichzeitig munter an der Endlosschleife arbeitet) und man kann die Ausführung beenden.
Geht vielleicht auch irgendwie einfacher, weiß ich aber nicht besser.
achja, und vielleicht sollte es nicht
watt<_maxwatt
heissen, sondern watt<=_maxwatt
Ansonsten, entschuldigt mich bitte fuer den Fehler, und Danke fuer die Berichtigung. Wollen ja hier niemandem was flachses erzaehlen, nicht?
MoKrates