Moin Leute
ich hab ein Problem und zwar muss ich in BlueJ ein Programm schreiben, welches eine Ampel simuliert. Nun bin ich bis zu dem Punkt gekommen wo die Ampel in die Rot/Gelb Phase schaltet. Mein Problem ist das wenn ich auf weiter klicke die Ampel nicht in die Grün Phase schaltet, sondern rot leuchtet und Gelb ein und ausgeschaltet wird.
Ich vermute der Fehler liegt bei dem else if (_gelbLeuchtet && _rotLeuchtet). Danke für eure Hilfe.
[CODE lang="java" title="Ampel"]/**
* Schaltet die Ampel in die naechste Phase (gruen -> gelb -> rot -> rot/gelb -> gruen).
*/
public void schalteWeiter()
{
if (_gruenLeuchtet)
{
_gelbLeuchtet = true;
_gruenLeuchtet = false;
}
else if (_gelbLeuchtet)
{
_rotLeuchtet = true;
_gelbLeuchtet = false;
}
else if (_rotLeuchtet)
{
_gelbLeuchtet = true;
Ich weiß nicht, irgewndwie sieht mir die Lösung mit den true/false nicht sehr chic aus.
Das ist auch ein bisschen inkonsistent. wieso ist das vorgehen bei rot ein anderes als bei grün und gelb?
Vllt überlegst du die einen Enum zunutzen oder so.
Hast du es schonmal auf dem Papier durchgespielt, wie es konkret funktionieren soll?
Die Prüfung von: else if (_gelbLeuchtet && _rotLeuchtet)
wird nie durchlaufen, denn bei dem Fall würde ja zuerst in ein anderes if gegangen.
Mehrere Optionen:
a) Die Prüfungen verändern, also prüfen ob gelb leuchtet und rot nicht bzw. ob rot leuchtet und gelb nicht.
b) die Reihenfolge ändern: Die am weitest gehende Prüfung zuerst prüfen: Also erst prüfen: rot und gelb? Dann erst rot bzw. gelb prüfen.
c) Verschachtelte Prüfungen: Wenn einem sowas gefällt, dann kann man auch verschachteln: Wenn gelb leuchtet, dann prüfst Du erst einmal ob rot leuchtet um dann halt zwei Aktionen zu haben (im if rot und im dazu gehörigen else).
Ich denke, dass b) der übliche und am einfachsten lesbare Weg ist.
Die Prüfung von: else if (_gelbLeuchtet && _rotLeuchtet)
wird nie durchlaufen, denn bei dem Fall würde ja zuerst in ein anderes if gegangen.
Mehrere Optionen:
a) Die Prüfungen verändern, also prüfen ob gelb leuchtet und rot nicht bzw. ob rot leuchtet und gelb nicht.
b) die Reihenfolge ändern: Die am weitest gehende Prüfung zuerst prüfen: Also erst prüfen: rot und gelb? Dann erst rot bzw. gelb prüfen.
c) Verschachtelte Prüfungen: Wenn einem sowas gefällt, dann kann man auch verschachteln: Wenn gelb leuchtet, dann prüfst Du erst einmal ob rot leuchtet um dann halt zwei Aktionen zu haben (im if rot und im dazu gehörigen else).
Ich denke, dass b) der übliche und am einfachsten lesbare Weg ist.