Langbaeh hat geschrieben:Also die Fehlermeldung kommt definitiv, wenn man die Beepers mit nextToABeeper prüft ...
Der Code prüft leider nur ob ein Beeperzähler auf dem Feld liegt, aber nicht ob der den Stand Null hat:
Code: Alles auswählen
if (current.avenue == currentBeepers.avenue && current.street == currentBeepers.street)
return true;
Langbaeh hat geschrieben:... und dann versucht aufzuheben.
Tja, wenn der Beeperzähler auf Eins war, wird er entfernt. Sonst einfach gnadenlos runtergezählt, das heißt wir haben jetzt -1 Beeper auf dem Feld liegen:
Code: Alles auswählen
if (currentBeepers.count == 1)
beepers.remove(currentBeepers);
else
currentBeepers.count--;
Langbaeh hat geschrieben:Die komischen X-Beeper mag er da irgendwie nicht.
Da hat sich jemand gedacht: "Hmmm, ich male mal Icons für 1-9 Beeper. Wenn es mehr sind, nehme ich einfach Icon 0, und male ein 'X'":
Code: Alles auswählen
int index = current.count;
if (current.count > 9)
index = 0;
drawImage(g, beepersImgs[index], current.avenue - 1, current.street - 1, avDist, stDist);
Leider sind 0 Beeper nicht vorgesehen, und -1 noch viel weniger, dann platzt nämlich beim Neumalen 'beepersImgs[index]'.
'X' soll also "mehr als Neun" heißen, die "X" für Null sind ein Bug in robots.jar der in der Aufgabe ausgenutzt wird und um den wir jetzt irgendwie rumarbeiten müssen.
Mir fallen spontan drei Möglichkeiten ein:
1.) Man legt keine 0-Beeper.
- Vorteil: Die sauberste Lösung: robots.jar wird benutzt wie vorgesehen, Nachteil: Kein "GDI 1"-Muster.
2.) Man legt die 0-Beeper nach dem Abernten.
- Vorteil: "GDI 1"-Muster, Nachteil: Eher ein Hack.
3.) Man übergibt das Feld an die Robots und vermeidet die 0-Beeper.
- Vorteil: Die Lösung die vom Aufgabensteller präferiert wird, Nachteil: Der Robot schleppt mehr Informationen herum als er müßte.
Ich bin von 1. über 2. nach 3. gekommen, muß aber sagen das keine Lösung wirklich befriedigend ist

Premature optimization is the root of all evil.
Don't anthropomorphize computers: They hate that.