{
"llm" : {
"feedback" : "# Exercise: textanalysis\n\n### Correctness\n- In `topWord()`, you compare strings with `==` (`if (word == list.get(i))`). That checks reference identity, not whether the words have the same characters, so equal words may not be counted correctly and the returned “most frequent word” can be wrong.\n\n### Suggestion\n- Use a content-based comparison for strings when counting occurrences (i.e., compare the actual text of the words, not whether both variables point to the same object).\n\n### Code Style\n- Your fields `list` and `set` should be `private` (encapsulation), and ideally `final` if you don’t reassign them.\n- Keeping both an `ArrayList` of all words and a `HashSet` of unique words works, but it’s heavier than necessary; consider a single structure that directly stores counts per word.\n- Remove the `// TODO` comments once the methods are implemented.\n\n\n# Exercise: lotto\n\n### Correctness\n- In `Lottery` hast du `maxNumber`, `soldTickets` und `winningNumbers` als `static` deklariert; damit teilen sich alle Lottery-Instanzen denselben Zustand, was nicht zur Aufgabenbeschreibung passt (jede Lotterie soll ihren eigenen Zustand haben).\n- `Lottery.hasDrawn()`, `Lottery.getWinningNumbers()` und `Lottery.draw()` sind bei dir `static`, im vorgegebenen API/Verwendung werden sie aber als Instanzmethoden auf einem `lottery`-Objekt aufgerufen.\n- In `buyTicket` wirfst du bei ungültigen Zahlenanzahlen / Bereich / Duplikaten `IllegalStateException`; gefordert ist dafür `IllegalArgumentException` (nur “nach draw noch Tickets kaufen” ist `IllegalStateException`).\n- Die Prüfung auf “genau 6 Zahlen” ist falsch: du prüfst `numbers.length < 6`, aber erlaubt damit z.B. 7 Zahlen, obwohl “genau 6” verlangt ist.\n- In `draw()` erzeugst du eine lokale Variable `var winningNumbers = new HashSet<>();`, die das Feld überschattet; dadurch wird das Klassen-/Instanzfeld `winningNumbers` nie gesetzt und `getWinningNumbers()` bleibt danach weiterhin im “nicht gezogen”-Zustand.\n- In `draw()` verwendest du `rand.nextInt(1, maxNumber)`; damit ist `maxNumber` exklusiv, d.h. die Höchstzahl kann nie gezogen werden (es müssten Zahlen von 1 bis inklusive Höchstzahl möglich sein).\n- In `Ticket.getPrize()` ist der Fall “genau 1 richtige Zahl” falsch: laut Aufgabe gibt es dann 5 CHF, bei dir kommt 0 zurück.\n\n### Suggestion\n- Überlege, welche Daten wirklich pro Lotterie-Objekt gespeichert werden müssen (Zustand “gezogen?”, verkaufte Tickets, maxNumber) und welche Auswirkungen `static` auf mehrere Instanzen hätte.\n- Schau dir die Javadoc der Methoden in `Lottery` an: welche Exceptions sind für “falsche Eingaben” vs. “falscher Zustand” vorgesehen?\n- “Genau 6 Zahlen” lässt sich am einfachsten prüfen, wenn du auf Gleichheit zur erwarteten Anzahl testest (nicht nur “zu wenig”).\n- Achte in `draw()` darauf, dass du nicht versehentlich eine neue lokale Variable mit demselben Namen wie das Feld anlegst; Ziel ist, dass `getWinningNumbers()` nach `draw()` die gezogenen Zahlen liefern kann.\n- Prüfe bei der Zufallszahl-Erzeugung, ob deine Random-API die obere Grenze inklusiv oder exklusiv behandelt, und ob damit wirklich 1..maxNumber abgedeckt ist.\n- Für den Gewinn: setz die Regel “1 Richtige → BASE_PRIZE” als eigenen Fall um und leite dann den Multiplikator-Fall daraus ab, statt “sonst 0”.\n\n### Code Style\n- In `buyTicket` sind mehrere `// TODO` stehen geblieben, obwohl die Methode implementiert ist; die Kommentare entfernen, wenn erledigt.\n- Exception-Meldungen sind teils unklar/umgangssprachlich (“Geht nicht!!”) und teils inkonsistent (Deutsch/Englisch gemischt); besser sachlich und einheitlich formulieren.\n- In `buyTicket` könntest du die Duplikatsprüfung mit einer Collection (`HashSet`) ausdrücken statt mit einer doppelten Schleife; das macht den Code kürzer und klarer (und passt zum Collection-Fokus der Aufgabe).\n",
"status" : "SUCCESS"
},
"unitTest" : {
"tests" : [ {
"name" : "buyTicketIds()",
"status" : "PASSED",
"message" : null
}, {
"name" : "buyTicketsIllegalNumbers()",
"status" : "PASSED",
"message" : null
}, {
"name" : "draw()",
"status" : "FAILED",
"message" : null
}, {
"name" : "drawNoDuplicates()",
"status" : "FAILED",
"message" : null
}, {
"name" : "drawRandom()",
"status" : "FAILED",
"message" : null
}, {
"name" : "drawAlreadyDrawn()",
"status" : "FAILED",
"message" : null
}, {
"name" : "getWinningNumbersNotDrawnYet()",
"status" : "FAILED",
"message" : null
}, {
"name" : "buyTicketAlreadyDrawn()",
"status" : "FAILED",
"message" : null
} ]
}
}