{
"llm" : {
"feedback" : "# Exercise: textanalysis\n\n### Correctness\n\n\n### Suggestion\n\n\n### Code Style\n- Du importierst `Map`, nutzt es aber nur in der Schleife; das ist okay, aber du könntest entweder konsequent `var` verwenden oder den Import beibehalten und dann auch `Map` als Typ in der Felddeklaration nutzen (z.B. Interface statt konkrete Klasse), damit die Implementierung austauschbar bleibt.\n- In `topWord()` initialisierst du `topWord` mit `null`, gibst aber bei leerer Map `\"\"` zurück. Einheitlicher wäre es, nur eine der beiden Varianten zu verwenden (entweder immer `\"\"` als Default oder immer `null` vermeiden), damit das Verhalten klar bleibt.\n\n\n# Exercise: lotto\n\n### Correctness\n- `Lottery.buyTicket` ist nicht implementiert und gibt immer `null` zurück; damit werden weder IDs vergeben noch Zahlen validiert noch Tickets erstellt.\n- `Lottery.draw` ist nicht implementiert; es werden keine 6 zufälligen, verschiedenen Gewinnzahlen gezogen/gespeichert und die Zustandslogik (nur einmal draw) fehlt damit ebenfalls.\n- In `Ticket` fehlt das Speichern der Ticket-Zahlen (keine Instanzvariable dafür) und die Methoden `getNumbers`, `getCorrectNumbers` und `getPrize` geben aktuell nur `null` bzw. `0` zurück; damit kann das Ticket weder seine Zahlen noch die korrekten Zahlen noch den Gewinn berechnen.\n- Die Zustandsanforderungen werden so nicht erfüllt: `buyTicket` muss nach einer Ziehung `IllegalStateException` werfen; `getCorrectNumbers`/`getPrize` müssen vor der Ziehung `IllegalStateException` werfen; `draw` darf nach der Ziehung nicht nochmals aufgerufen werden.\n\n### Suggestion\n- Für `buyTicket`: Überlege dir zuerst eine Reihenfolge der Prüfungen: (1) Zustand “noch nicht gezogen?”, (2) genau 6 Zahlen?, (3) jede Zahl im Bereich 1..maxNumber?, (4) keine Duplikate. Eine `Set`-Struktur hilft dir beim “alle verschieden”-Check.\n- Für die Ticket-ID: Nutze den Zähler `soldTickets` so, dass das erste Ticket wirklich ID 1 erhält und danach jeweils hochgezählt wird, bevor du das `Ticket` zurückgibst.\n- Für `draw`: Du brauchst 6 verschiedene Zufallszahlen im Bereich 1..maxNumber. Mit einer `Set`-Collection kannst du so lange ziehen, bis die Größe 6 erreicht.\n- Für `Ticket`: Lege eine Instanzvariable für die 6 Zahlen fest (z. B. eine Collection, die Duplikate verhindert). Beim Konstruktor die übergebenen Zahlen in diese Struktur übernehmen.\n- Für `getNumbers`: Gib eine Kopie zurück (nicht die interne Struktur), damit Client-Code das Ticket nicht nachträglich “verändert”.\n- Für `getCorrectNumbers`: Hole dir die Gewinnzahlen von der verknüpften `Lottery` (das erzwingt automatisch den richtigen Zustand, wenn `Lottery.getWinningNumbers()` vor draw eine Exception wirft) und bilde die Schnittmenge mit den Ticket-Zahlen.\n- Für `getPrize`: Orientiere dich strikt an der Anzahl korrekter Zahlen: 0 → 0, 1 → 5, jede weitere korrekte Zahl → Gewinn jeweils *20. Am besten erst die Anzahl korrekter Zahlen ermitteln und daraus den Betrag ableiten.\n\n### Code Style\n- In mehreren Methoden stehen noch `// TODO` und Dummy-Rückgaben (`null`, `0`); das erschwert Debugging, weil Fehler dann als `NullPointerException` später auftauchen. Sobald du implementierst, entferne die Platzhalter-Rückgaben.\n- In den Javadocs von `Ticket.getNumbers` steht “als ArrayList”, die Methodensignatur liefert aber `Integer[]`. Achte darauf, dass Kommentar und Signatur konsistent bleiben (entweder Kommentar anpassen oder tatsächlich Collection verwenden und dann passend zurückgeben).\n",
"status" : "SUCCESS"
},
"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
} ]
}
}