{
"llm" : {
"feedback" : "# Exercise: textanalysis\n\n### Correctness\n\n\n### Suggestion\n\n\n### Code Style\n- In `add`, you update the map twice for words that already exist (`put(word, 1)` and then `put(word, prev + 1)`). It works, but it’s unnecessarily doing extra work and temporarily overwrites the old count. Consider using a single update step that directly derives the new count from the previous one.\n- There are a couple of extra blank lines at the end of `add` that you could remove to keep the method tidy.\n\n\n# Exercise: lotto\n\n### Correctness\n- `Lottery.buyTicket` ist nicht implementiert und gibt immer `null` zurück; damit können keine Lose gekauft werden (und späterer Code führt zu Fehlern).\n- In `Lottery.buyTicket` fehlt damit auch die geforderte Validierung: genau 6 Zahlen, alle im Bereich `1..maxNumber`, und alle 6 verschieden.\n- In `Lottery.buyTicket` fehlt die Zustandsprüfung: Nach der Ziehung darf kein Ticket mehr verkauft werden (`IllegalStateException`).\n- `Lottery.draw` ist nicht implementiert; es werden keine 6 zufälligen, unterschiedlichen Gewinnzahlen gezogen und gespeichert.\n- In `Lottery.draw` fehlt die Zustandsprüfung: Nach einer erfolgten Ziehung darf nicht nochmals gezogen werden (`IllegalStateException`).\n- `Ticket` speichert die übergebenen Zahlen nicht (fehlende Instanzvariable + Konstruktor unvollständig).\n- `Ticket.getNumbers` ist nicht implementiert und liefert `null` statt einer Kopie der Ticketzahlen.\n- `Ticket.getCorrectNumbers` ist nicht implementiert; außerdem fehlt die geforderte Einschränkung, dass es vor der Ziehung eine `IllegalStateException` geben muss.\n- `Ticket.getPrize` ist nicht implementiert und berechnet den Gewinn nicht gemäß Vorgabe (0→0, 1→5, jede weitere Zahl ×20); außerdem fehlt auch hier der `IllegalStateException`-Fall vor der Ziehung.\n\n### Suggestion\n- Implementiere `buyTicket` so, dass du zuerst prüfst, ob schon gezogen wurde, bevor du irgendeine Validierung/Erstellung machst.\n- Für die Ticket-Validierung: Überlege dir eine Collection, mit der du Duplikate leicht erkennst (z. B. über die Größe nach dem Einfügen) und prüfe zusätzlich den Wertebereich jeder Zahl.\n- Den Ticket-Zähler (`soldTickets`) kannst du als Quelle für die fortlaufende ID verwenden; wichtig ist, dass das erste Ticket die 1 bekommt und es pro Verkauf genau einmal hochgezählt wird.\n- Für `draw`: Du brauchst 6 *verschiedene* Zufallszahlen; eine Collection, die keine Duplikate zulässt, hilft dir, bis zur Größe 6 zu sammeln.\n- Speichere die Ticketzahlen im `Ticket` in einer eigenen Instanzvariablen, und gib in `getNumbers` eine Kopie zurück (damit der Client nicht deine internen Daten verändern kann).\n- Für `getCorrectNumbers`: Hol dir die Gewinnzahlen von der `Lottery` (das löst automatisch den “vor Ziehung”-Fehlerfall aus, wenn du es passend aufbaust) und bilde dann die Schnittmenge mit den Ticketzahlen, ohne dabei die internen Datenstrukturen dauerhaft zu verändern.\n- Für `getPrize`: Nutze die Anzahl korrekter Zahlen als Basis und bilde daraus den Gewinn gemäß “Start bei 5, dann pro zusätzlicher korrekter Zahl mal 20”; achte darauf, dass 0 korrekte Zahlen wirklich 0 ergeben.\n\n### Code Style\n- In mehreren Methoden stehen noch `// TODO` plus Dummy-Returns (`null`/`0`); das führt schnell zu Folgefehlern (z. B. `NullPointerException` in `toString()` über `Arrays.toString(getNumbers())`), sobald die App läuft.\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
} ]
}
}