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.
Kalaha
Darf man in dieser Aufgabe Aufrufe aus der Math Klasse aus der Java API verwenden??
Schon mal vielen Dank für die Antworten
klar darf man das... ;)!
Mmh okey… Seltsam
Ich dachte eigentlich an Zufallszahlen für die chooseInitialPlayer… Oder geht das auch anders??
Klar geht das auch anders :-p
http://docs.oracle.com/javase/7/docs/api/java/util/Random.html
xkcd: Random Number
Ich hätte ebenfalls eine indirekte Frage zur Aufgabe.
Sind die Testcases im EST wirlich korrekt? Ich bin schon solange am Fehlersuchen, Tun und Machen, aber ich find keine Unstimmigkeiten an meinem Programmtext. Die Testcases im EST weisen mich aber daraufhin, dass Testcases fehlschlagen.
Oder anders: Hat jemand nach dem Hochladen einen grünen Haken im EST erhalten?
wir haben nen grünen haken.
hast du evtl in eclipse gearbeitet und hast das Programm nicht im default package erstellt? Da passierts mir auch immer wieder das ich vergesse den Package namen rauszunehmen beim hochladen und krieg nen rotes X. Aber stimmt jetzt wo du es sagst, wir haben selbst für einen in der spiellogik fehlerhaften code einen grünen Haken bekommen (stand Montag).
Greets
Exar
Ne, daran liegts nicht. Ich hab sogar extra die Importanweisung wieder rausgenommen (Random) und die Klasse Math benutzt. Echt komisch … aber gut, wenn das bei euch grün aufleuchtet, werde ich wohl doch den einen oder anderen Fehler im Programm haben.
also kalaha bietet sich extrem gut an um viele Sachen in eigene Methoden auszulagern. Am Anfang war ich auch extrem auf der Suche nach Fehlern und irgendwann hab ich einfach nimmer durch geblickt und habe angefangen Teile der Spiellogik in kleinere Methoden zu zerlegen und zack schon ging alles so wies soll
Ich habe sie nicht formal verifiziert… Das mache ich erst ab Kap. 9 ;)…
Dazu nochmal aus dem Blatt-00 zitiert:
- „“: Das Übersetzen der Abgabe (mit und ohne Testfall) war erfolgreich, aber der Testfall war nicht erfolgreich (das Programm enthält noch Fehler). <= das was gemeinhin „öffentlicher Test in der main-Methode“ ist
- „✓“: Beachten Sie: da wir Ihre Abgaben mit weiteren, geheimen Testfällen testen, kann es also sein, dass Sie auch bei diesem Ergebnis nicht die volle Punktzahl erhalten werden! <= aka „das Programm enthält vermutlich trotzdem noch Fehler“
Um aus dem Nähkästchen zu plaudern: Unter den Leuten mit „✓“ liegt die Höchstpunktzahl derzeit bei 30 von 37 Punkten, während unter den Leuten mit einem „“ das Maximum bei 33.5 von 37 liegt - so kann’s auch gehen…
In solchen Fällen wäre eine Rechnerübung empfehlenswert. Funktioniert bei dir ansonsten das Fangen und das Aufräumen nach dem Spielende korrekt?
Die frage ist aber warum kriegen wir, zum beispiel bei FAUCoin so passiert, bei einem Grünen Haken nur 3 von 20 Punkten?
Das man beinem grünen Haken evtl nicht voll Punktzahl hat ist mir soweit auch klar, aber das fand ich übertrieben.
Das hat mich auch verwundert, drum hab ich in den Code mal reingesehen.
Ihr macht halt nur und ausschliesslich jeweils den einen Fall richtig, der in der [m]main[/m]-Methode abgetestet wird.
Die Aussage vom gruenen Haken ist: alle oeffentlichen Testfaelle (also eine Stichprobe!) gehen. Das befreit euch also nicht davon, selbst Testfaelle zu erstellen und das Resultat nachzuvollziehen. Diese und deren Ergebnisse koennt und sollt ihr auch im Forum teilen. Die Stichprobe war hier klein gehalten, aber gerade bei einer Gruppenaufgabe erwarte ich schon, dass ihr selbstaendig mehr testet.
War ich heute. Aus Zeitgründen jedoch nicht lange genug, um mit dem Tutor alles zu besprechen.
Ich versuch mein Glück weiter, vielleicht krieg ich es am WE noch hin.
Ja, das Fangen und Aufräumen klappt ohne Probleme, soweit ich das Spiel verstanden habe.
Ich hätte noch eine Frage zu der Methode cleanupBoardForWinner.
im Text steht ja: “…the
* game ends. The other player moves all remaining seeds from the
* houses to his/her store, and the player with the most seeds in his/her
* store wins. …”
Ich versteh es folgendermaßen (und so hats mir auch der Tutor in der RechnerÜbung erklärt): wenn zb. Spieler A keine Bohnen mehr in seinen Mulden hat endet das Spiel, dann kommen alle übrig gebliebenen Bohnen aus den Mulden von B in die Gewinnmulde von B. Und wer dann die meißten Bohnen hat, hat gewonnen.
Aber ein paar Sätze weiter unter steht: “…@return
- the board after moving all seeds from all houses to the store
* of the winner, if there is one at all …”
*
Das wiederum interpretiere ich so: der Gewinner wird bestimmt, und dann werden die Bohnen die noch in ALLEN Mulden übrig sind, in die Gewinnmulde des Gewinners gelegt. Wenn also zb A gewinnt, dann kommen auch die Bohnen aus den Mulden von B, in die Gewinnmulde von A.
Was stimmt denn nun?
korrekt.
(und außerdem: wenn ein Spieler aufgrund der >50%-der-Bohnen-in-Gewinnmulde-Regel gewinnt…)
korrekt.
beides. wo siehst du da einen Widerspruch?
Achtung: Spielmulde == house // Gewinnmulde == store // Spielmulde != Gewinnmulde
[m]getWinner[/m] bestimmt nur, ob und wer gewonnen hat (muss dabei natürlich „in die Zukunft“ schauen und das potentielle/virtuelle Einsammeln aller noch nicht gewonnenen Bohnen dabei mit-berücksichtigen!), modifiziert aber nichts am Bohnenstand - der erste Kommentar beschreibt die Spielregel, nicht was die Methode tut!
[m]cleanupBoardForWinner[/m] räumt gemäß Spielregeln auf, sofern ein Gewinner feststeht
=>
[m]getWinner[/m] und [m]cleanupBoardForWinner[/m] müssen konsistent sein: beide müssen den gleichen Spieler als Gewinner nach einem virtuellen (im Falle von [m]cleanupBoardForWinner[/m] danach auch realen) Bohnenübertrag identifizieren (sofern es einen gibt)
Okay, ich versuch mal es an einem Beispiel zu verdeutlichen, was sich da für mich zu widersprechen scheint. Vielleicht versteht man dann mein Problem besser
Sagen wir mal, A hat keine Bohnen mehr in seinen Spielmulden und das Spiel ist zu Ende. In den Spielmulden von B liegen aber noch einige Bohnen.
Die erste Variante wäre nun: Die Bohnen die noch in den Spielmulden von B liegen, kommen in die Gewinnmulde von B. Dann sind alle Spielmulden leer und alle Bohnen auf die beiden Gewinnmulden verteilt. Erst dann werden die Bohnen gezählt und Gewinner ist, wer mehr Bohnen in seiner Gewinnmulde hat.
Die zweite Variante wäre: Es werden erstmal die Bohnen in den Gewinnmulden gezählt, wer mehr hat ist der Gewinner.
Und der Gewinner bekommt dann auch die übrigen Bohnen, die noch in den Spielmulden von B liegen. D.h. wenn A der Gewinner wäre, würde er dann die Bohnen die noch in den Spielmulden von B liegen, auch bekommen.
Für mich mach die erste Variante mehr Sinn, aber diesen Satz " … @return
- the board after moving all seeds from all houses to the store
* of the winner,…" verwirrt mich halt, weil der für mich so klingt, als wäre die zweite Variante gemeint.
*
Ah und noch was! Im EST sind die Gruppenaufgaben und Einzelaufgaben von Blatt 4 durcheinander gebracht worden. Bei mir stehen die Gruppenaufgaben unter der Einzelabgabe und die Einzelaufgabe ist bei der Gruppenabgabe aufgelistet. Lg
Nein, hier mit ist nicht deine zweite Variante gemeint.
Es gibt allerdings noch eine zweite Möglichkeit das Spiel zu gewinnen, außer seinen Gegner zugunfähig zu machen: Wenn du mehr als die Hälfte der verfügbaren Samen in deiner Gewinnmulde hast, kann dein Gegner gar nicht mehr gewinnen, auch wenn er noch Samen zum Ziehen hat. Hier werden dann auch die Samen, die noch in seinen Spielmulden liegen, in deine Gewinnmulde gelegt.
Ahh achso, okay jetzt ist mir alles klar. Vielen Dank!