{
"unitTest" : {
"tests" : [ {
"name" : "buyTicketIds()",
"status" : "FAILED",
"message" : null
}, {
"name" : "buyTicketsIllegalNumbers()",
"status" : "PASSED",
"message" : null
}, {
"name" : "draw()",
"status" : "FAILED",
"message" : "expected: <true> but was: <false>"
}, {
"name" : "drawNoDuplicates()",
"status" : "FAILED",
"message" : null
}, {
"name" : "drawRandom()",
"status" : "FAILED",
"message" : null
}, {
"name" : "drawAlreadyDrawn()",
"status" : "FAILED",
"message" : "Expected java.lang.Exception to be thrown, but nothing was thrown."
}, {
"name" : "getWinningNumbersNotDrawnYet()",
"status" : "FAILED",
"message" : null
}, {
"name" : "buyTicketAlreadyDrawn()",
"status" : "FAILED",
"message" : null
} ]
},
"llm" : {
"feedback" : "# Exercise: textanalysis\n\n### Correctness\n- `add(String word)` ist nicht implementiert, dadurch werden keine Wörter gezählt und die Klasse sammelt keine relevante Information.\n- `topWord()` ist nicht implementiert und gibt immer `\"\"` zurück, statt das häufigste Wort zu liefern.\n\n### Suggestion\n- Überlege dir eine interne Datenstruktur, die zu jedem Wort mitzählt, wie oft es vorkommt (Wort → Anzahl). Beim Aufruf von `add` musst du diesen Zähler passend initialisieren oder erhöhen.\n- In `topWord()` musst du über alle gespeicherten Wörter/Einträge iterieren und dir dabei merken, welches Wort aktuell die höchste Häufigkeit hat; am Ende gibst du dieses Wort zurück (bei Gleichstand ist irgendeines ok).\n\n### Code Style\n- In `WordCounter` fehlen aktuell Felder/Member komplett; sobald du eine Collection verwendest, lege sie als `private` Feld an, statt sie in jeder Methode neu zu erstellen.\n- Die TODO-Kommentare sind ok für den Anfang, sollten aber nach der Implementierung entfernt/ersetzt werden.\n\n\n# Exercise: lotto\n\n### Correctness\n- `Lottery.buyTicket` ist nicht implementiert und gibt immer `null` zurück; damit werden keine Tickets erstellt, keine IDs vergeben und die geforderten Validierungen/Exceptions fehlen.\n- `Lottery.draw` ist nicht implementiert; es werden keine 6 zufälligen, verschiedenen Gewinnzahlen gezogen und der Zustand „nach der Ziehung“ wird nie erreicht.\n- `Ticket` speichert die übergebenen Zahlen nicht; dadurch können `getNumbers`, `getCorrectNumbers` und `getPrize` nicht korrekt funktionieren.\n- `Ticket.getNumbers` ist nicht implementiert und gibt `null` zurück; gefordert ist die Rückgabe der 6 Ticket-Zahlen (als Kopie).\n- `Ticket.getCorrectNumbers` ist nicht implementiert und gibt `null` zurück; gefordert ist eine Liste/Array der Schnittmenge aus Ticket-Zahlen und Gewinnzahlen (und erst nach der Ziehung).\n- `Ticket.getPrize` ist nicht implementiert und gibt immer `0` zurück; die Gewinnlogik (0→0, 1→5, dann jeweils *20) fehlt sowie die Zustandsprüfung „erst nach draw“.\n\n### Suggestion\n- Bei `buyTicket`: Überlege dir zuerst die Zustandsregel („Tickets nur vor der Ziehung“) und wirf dann passend eine `IllegalStateException`, bevor du irgendetwas erstellst.\n- Für die Validierung der 6 Zahlen: Prüfe (1) Länge genau 6, (2) jede Zahl im Bereich 1..maxNumber, (3) keine Duplikate – eine Collection wie `Set` hilft dir, Duplikate einfach zu erkennen.\n- Für die Ticket-ID: Nutze den bestehenden Zähler `soldTickets` so, dass das erste Ticket wirklich ID 1 bekommt und jedes weitere hochzählt.\n- Bei `draw`: Du brauchst 6 *verschiedene* Zufallszahlen im Bereich 1..maxNumber; mit einem `Set` kannst du so lange ziehen, bis die Größe 6 ist.\n- Bei `Ticket`: Lege eine Instanzvariable für die Ticket-Zahlen an (z. B. eine Collection), fülle sie im Konstruktor aus dem `numbers`-Array, und gib in `getNumbers` eine Kopie zurück.\n- Für `getCorrectNumbers`: Nutze die Gewinnzahlen aus der `Lottery` (die Methode wirft vor der Ziehung ohnehin eine `IllegalStateException`) und bilde die Schnittmenge mit den Ticket-Zahlen, ohne dabei die Originaldaten dauerhaft zu verändern.\n- Für `getPrize`: Bestimme zuerst die Anzahl korrekter Zahlen und baue daraus den Gewinn nach der vorgegebenen Staffelung auf (Start bei BASE_PRIZE für 1 Treffer, danach pro weiterem Treffer *MULTIPLIER).\n\n### Code Style\n- In der aktuellen Form enthalten mehrere Methoden nur `// TODO` und Dummy-Returns (`null`/`0`); das führt schnell zu `NullPointerException` in `toString()`/App-Ausgabe – sobald du implementierst, verschwinden diese Platzhalter.\n- Achte darauf, in `getNumbers()` wirklich eine Kopie zurückzugeben (nicht die interne Datenstruktur direkt), damit Client-Code die Ticket-Zahlen nicht nachträglich verändern kann.\n",
"status" : "SUCCESS"
}
}