3.4: Grab the Cookies

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

3.4: Grab the Cookies
moinsen!

Hab n bisschen ein Problem beim Teil

game.getPlayers() gibt mir eine Collection zurueck. Wie kann ich damit arbeiten? Hab noch nie was von Collections gehoert :smiley: Wie kann ich drueber iterieren/mir die Objekte in beliebiger reihenfolge rausgeben lassen?

Googlen war leider wenig hilfreich, da wird die Collection als irgendne unterart (zB Arraylist, was es in diesem fall ja auch eigentlich ist…) verwendet und dann einfach mit collection.get(i) gearbeitet… was hier aber nicht moeglich ist. Und java.util.ArrayList importen darf ich wohl auch nicht vermute ich?

Ne Moeglichkeit waere noch, die collection mit .toArray in ein Array zu verwandeln… aber ist das so gewollt? Mich wundert eh, dass nicht einfach die ArrayList an sich zurueckgegeben wird.

edit: grad versucht mit toArray zu arbeiten, Problem ist dass ich dann ein Object rausbekomme… und das moechte er nicht in CookiePlayer casten. (meckert der compiler) Kann zwar dann beim ArrayZugriff das object noch in CookiePlayer casten, aber wofuer brauch ich dann noch den java.util.collection import? Darf ich den einfach rausschmeissen?

  1. Frage:

Wozu? Was soll dann ueberhaupt in dem Konstruktor gemacht werden?


Hiermit?

2 Likes

Du kannst entweder direkt mit [m]iterator()[/m] arbeiten (wie mein Vorposter geschrieben hat), oder eine for-in-Schleife verwenden:

for (final CookiePlayer player : game.getPlayers()) {
    // Tue etwas mit player
}

Außerdem darfst du natürlich [m]ArrayList[/m] importieren. Wer hat denn behauptet, du dürftest das nicht? Dann könntest du nämlich auch folgendes tun:

ArrayList<CookiePlayer> list = new ArrayList<>(game.getPlayers());

Der Default-Konstruktor ist notwendig, damit die GrabTheCookies-Klasse in das Testsystem passt. Wenn du in GrabTheCookies gar keinen Konstruktor definiert hast, dann brauchst du nichts weiter tun, weil ein solcher Konstruktor automatisch erzeugt wird. Einen Default-Konstruktor musst du nur für den Fall definieren, dass du einen eigenen Konstruktor für GrabTheCookies definiert hast, der Parameter entgegen nimmt. Das sollte eigentlich auch in der Übung erklärt worden sein.

2 Likes

hab auch ein Problem bei der Aufgabe:
ich habe es geschafft, dass alle Spieler sich Kekse nehmen, aber unendlich oft, sobald das Spielfeld leer ist kommen wieder Kekse dazu.
jetzt habe ich das ganze so eingerichtet, dass wenn game.finished() true ist, dass dann die Threads unterbrochen werden, und zack, jetzt nimmt sich nur noch ein Spieler kekse, die anderen tuen einfach nichts mehr

habe im Thread mit einer while schleife gearbeitet, die immer wieder beim spieler grab a cookie aufruft, solange interrupted noch false ist

jemand eine Idee?


volatile vergessen?


wo und wie soll ich das denn verwenden? oO


Du musst .finished() der CookieGame-Instanz abfragen.
Interrupted bringt Dir meiner Meinung nach nichts.


Darf man hier Executor Service verwenden oder auch nicht? Weil ich das grade bei der Picasso-Aufgabe gelesen hatte, dass dort nur Threads erlaubt sind…