Fehler in Vorlage für HÜ 8?

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex » 31. Dez 2007 09:34

Jepp, genau so meinte ich das auch, vielleicht nur nicht konkret ausgedrückt:
Denkt daran, die Parameter für die Ants sind frei wählbar (siehe auskommentierter Text in der Applikation), also wieso dann kein Feld als Parameter übergeben?
So oder so, wäre ansonsten das Feld bis auf die Initialisierung der Welt sinnfrei, wenn man es nicht in die Antsklasse kopiert. Genau da braucht man ja auch die Informationen, wegen den X-Beepers, weil ja die reguläre Routine abstürzt. Deswegen meinte ich ja auch, dass man die einfach überschreiben kann und die neue Methode halt als Zusatzinformation das Feld heranzieht...man bedenke Auswertungsreihenfolgen bei booleschen Operationen. :wink:

Benutzeravatar
Demmi
Kernelcompilierer
Kernelcompilierer
Beiträge: 423
Registriert: 1. Okt 2007 12:56
Wohnort: Darmstadt

Beitrag von Demmi » 31. Dez 2007 16:43

Krümelmonster hat geschrieben:Um das Feld zu "rekonstruieren" genügt ein einfaches "=". ;-)
Ich hab nur keine Ahnung wie das gehen soll, weil das Feld an sich ja erstmal private sein muss.

Man kann es meiner Meinung nach nur so machen wie in der PrepareField-Methode machen:

Code: Alles auswählen

for (int i=0; i<p.getHeight(); i++)
			for (int j=0; j<p.getWidth(); j++)
				 NeuesFeld[j][i]=p.getValueAt(j, i)
Direkt übergeben mit = dürfte nicht drin sein. Außer man bastelt sich eine getField()-Methode.
Oder hab ich da nochwas übersehen?

Klar kann man direkt das p übergeben. Aber auch das beschert keinen Direkt-Zugriff auf das Feld (ohne public oder ne get-Methode).
Saying that Java is nice because it works on all Plattforms is like saying that anal sex is nice because it works on all genders.

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex » 31. Dez 2007 17:27

Na klar geht direkt übergeben...
Wie gesagt, der Konstruktur von Ants muss als Parameter eine Variable vom Typ RectangleDataAccess übergeben bekommen. Dann kannst du im Konstruktor das übergebene Feld im statischen privaten Feld des gleichen Typs der Antsklasse mit "=" abspeichern.

Benutzeravatar
taufrisch
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 107
Registriert: 30. Sep 2007 02:42
Wohnort: 127.0.0.1

Beitrag von taufrisch » 31. Dez 2007 17:38

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 :roll:
Premature optimization is the root of all evil.

Don't anthropomorphize computers: They hate that.

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Beitrag von Krümelmonster » 31. Dez 2007 17:45

@Stump.Alex
Wenn du das Feld in der Ants-Klasse statisch machst, dann wäre
es wohl besser das Feld direkt in der main() Methode zu initialisieren,
anstatt es per Konstruktor immer wieder neu zu initialisieren, wenn
eine neues Objekt von Ants erstellt wird.

Aber im Prinzip hatte ich es so gemeint.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Benutzeravatar
Demmi
Kernelcompilierer
Kernelcompilierer
Beiträge: 423
Registriert: 1. Okt 2007 12:56
Wohnort: Darmstadt

Beitrag von Demmi » 31. Dez 2007 18:18

Ich habs jetzt auch hinbekommen... allerdings hat mich das Forum irgendwie mehr verwirrt, als das es mir geholfen hat. Bei Feld dachte ich die ganze Zeit an das Array in dem die Beeper-Anzahlen gespeichert werden.
Im Endeffekt übergibt man ja aber nur ein RectangleDataAccess worin man dann mittels getValueAt für jede Position prüft.
Saying that Java is nice because it works on all Plattforms is like saying that anal sex is nice because it works on all genders.

ChRiZz88
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 7. Nov 2007 18:09
Kontaktdaten:

Beitrag von ChRiZz88 » 2. Jan 2008 17:44

Hmm, also ich hab jetzt das Problem, nicht zu wissen, wie ich Konstruktoren für Robots definiere..
Ich hab das Interface von Aufgabe 3.) definiert und die Methode harvest() jetzt in AntyTheHarvesterApplication implementiert.
Hmm, dann habe ichs mal damit versucht

Code: Alles auswählen

AntyTheHarvesterApplication AntyTheHarvesterAnt = new AntyTheHarvesterApplication(0,0,Integer.MAX_VALUE, direction.EAST);
	AntyTheHarvesterAnt.harvest();
, weil ich dachte, dass der Konstruktor so heißen muss wie die Klasse..
Gelandet bin ich logischerweise aber bei:

Code: Alles auswählen

The constructor AntyTheHarvesterApplication(int, int, int, direction) is undefined
Wo is der Fehler?

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Beitrag von Krümelmonster » 2. Jan 2008 17:59

Du versuchst eine Instanz von "AntyTheHarvesterApplication" zu erstellen.
(Das ist die Klasse mit der Main-Methode).

Code: Alles auswählen

AntyTheHarvesterAnt anty = new AntyTheHarvesterAnt(...)
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

Beitrag von s!mon » 2. Jan 2008 19:26

Bild

Was soll das eigentlich links von GDI 1 sein? Hab ich da was verbockt :)?

edit: noch ne Frage. mit welcher Tastenkombi kann man nochmal ein Javadoc-Kommentar erzeugen? Habs in den Folien nicht gefunden. Sollte vielleicht in das Javadoc-Miniintro rein. Nur so als Anmerkung fall ichs nicht übersehen haben sollte.

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Beitrag von Krümelmonster » 2. Jan 2008 19:42

Shift+Alt+J
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

ChRiZz88
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 7. Nov 2007 18:09
Kontaktdaten:

Beitrag von ChRiZz88 » 2. Jan 2008 20:24

Krümelmonster hat geschrieben:Du versuchst eine Instanz von "AntyTheHarvesterApplication" zu erstellen.
(Das ist die Klasse mit der Main-Methode).

Code: Alles auswählen

AntyTheHarvesterAnt anty = new AntyTheHarvesterAnt(...)
Hatte ich vorher so.. Dann kommt "AntyTheHarvesterAnt cannot be resolved to a type."

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Beitrag von Krümelmonster » 2. Jan 2008 20:45

Hast du die Datei mit der Klasse auch im selben Package?
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

Beitrag von s!mon » 2. Jan 2008 21:42

AntyTheHarvesterApplication startet doch quasi nur deine Anwendung und initiiert die Welt. In der Datei musst du eigentlich gar nichts verändern um die Aufgabe zu lösen. Versteh gar nicht was du da machst.

Benutzeravatar
Demmi
Kernelcompilierer
Kernelcompilierer
Beiträge: 423
Registriert: 1. Okt 2007 12:56
Wohnort: Darmstadt

Beitrag von Demmi » 2. Jan 2008 23:31

Jo, in die Anty[...]Application musst du garnix reinschreiben außer die Parameter für den Konstruktor-Aufruf.

Dann musst du noch in der jeweiligen Klasse Anty[...] und Elisabeth[...] nen passenden Konstruktor bauen, der sich wiederum auf den der Superklasse (Robot) bezieht.
Das sollte dann fürs erste weiterhelfen ;)
Saying that Java is nice because it works on all Plattforms is like saying that anal sex is nice because it works on all genders.

mcdikki
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 117
Registriert: 22. Okt 2007 17:16
Wohnort: Frankfurt

Re: Fehler in Vorlage für HÜ 8?

Beitrag von mcdikki » 8. Jan 2008 21:04

Man muss im Übrigen das Feld für die NextToABeeper Mehtode nicht verändern.

Wenn man eine eigene NextToABeeper Methode mit den infos aus dem erzeugenten Array geschickt mit der NextToABeeper methode der classe Robots verbindet geht es wunderbar auch ohne der Veränderung des Feldes.

Antworten

Zurück zu „Archiv“