{
"llm" : {
"feedback" : "# Exercise: textanalysis\n\n### Correctness\n- In `topWord()` aktualisierst du `max` nie, dadurch wird nicht zuverlässig das häufigste Wort bestimmt (es wird nur das letzte Wort mit Anzahl > 0/aktueller `max` genommen).\n- In `TextAnalyzer` weicht dein Programm von der vorgegebenen Vorlage ab (Argument-Prüfung, Laden über `ClassLoader.getSystemResource(...)`, Ausgabe inkl. `Results for ...`). Das kann dazu führen, dass die Tests/Autograder nicht mit deiner Version funktionieren.\n\n### Suggestion\n- Schau dir in `topWord()` die Stelle an, wo du ein neues Maximum findest: Dort musst du neben dem Wort auch den zugehörigen Zählerstand als neues Maximum “merken”, sonst bleibt die Vergleichsbasis immer gleich.\n- Verwende im `TextAnalyzer` wieder die Struktur aus der Aufgaben-Vorlage (insbesondere das Einlesen über Ressourcen/Argument `args[0]` statt eines fest verdrahteten Pfads), damit dein Code in der vorgesehenen Umgebung läuft.\n\n### Code Style\n- Das große auskommentierte Code-Block in `TextAnalyzer` solltest du entfernen, sobald du zur finalen Lösung zurückkehrst (Versionskontrolle/History statt Kommentar-Blöcke).\n- Unnötige Imports in `TextAnalyzer` (z.B. `Files`, `Path` wenn du sie nicht nutzt) weglassen.\n- `words` sollte `private` sein, damit die interne Datenstruktur gekapselt bleibt.\n\n\n# Exercise: lotto\n\n### Correctness\n- In `Lottery.buyTicket(...)` prüfst du nicht, dass **genau 6 Zahlen übergeben** wurden (bei `numbers.length != 6` muss ebenfalls ein `IllegalArgumentException` kommen; aktuell rutscht z. B. ein Array mit Länge 5 bis zum `new HashSet<>(...)` durch und wird dann über `set.size()` geprüft, was nicht dasselbe ist).\n- In `Lottery.draw()` verwendest du `winningNumbers.size()` und `winningNumbers.add(...)`, obwohl `winningNumbers` zu Beginn `null` ist → das führt beim ersten Aufruf zu einer `NullPointerException` statt die Gewinnzahlen zu ziehen.\n- In `Lottery.buyTicket(...)` verwendest du `lst.getLast()`; das gibt es bei `ArrayList` nicht (Compile-Error) → damit ist das Ticket-ID-Verhalten nicht lauffähig.\n- In `Ticket.getPrize()` ist die Gewinnberechnung falsch:\n - Bei **0 richtigen Zahlen** muss der Gewinn **0** sein, bei dir wird es über den `else`-Zweig >0.\n - Bei **1 richtigen Zahl** passt 5, aber ab **2 richtigen Zahlen** multiplizierst du zu oft (du multiplizierst `length`-mal statt nur für “jede weitere” korrekte Zahl nach der ersten).\n \n### Suggestion\n- Für die “genau 6 Zahlen”-Anforderung: Überlege dir, welche Fälle `set.size() == 6` erfüllen kann, obwohl das Eingabearray **nicht** genau 6 Elemente hat (oder umgekehrt), und ergänze eine Prüfung direkt auf der Array-Länge.\n- Für `draw()`: Schau dir an, in welchem Zustand `winningNumbers` vor der Ziehung ist, und was du initialisieren musst, bevor du `.size()`/`.add()` darauf verwenden kannst.\n- Für die Ticket-ID: Du brauchst keine separate Liste für IDs. Überlege, welche Variable du bereits hast, die sowieso hochzählt, und wie du daraus direkt die ID fürs neue Ticket ableiten kannst (und welche Java-Methoden bei `ArrayList` überhaupt existieren).\n- Für `getPrize()`: Geh strikt nach der Aufgabenbeschreibung vor: erst den Spezialfall “0 Richtige”, dann “1 Richtige = Basis”, und dann pro zusätzlicher richtiger Zahl ein weiterer Multiplikationsschritt. Achte darauf, wie viele Multiplikationen das bei `n` richtigen Zahlen wirklich sind.\n\n### Code Style\n- `Lottery`: Die Instanzvariable `lst` (und Imports wie `ArrayList`) sind für die Aufgabe unnötig und machen die Logik komplizierter; besser nur den Ticketzähler verwenden.\n- `draw()`: `Random random = new Random();` innerhalb der Schleife ist unschön (jedes Mal neues Objekt); üblich ist, den `Random` einmal zu erstellen und dann wiederzuverwenden.\n- `Ticket.getPrize()`: Du rufst `getCorrectNumbers()` mehrfach auf; das berechnet jedes Mal neu. Eleganter ist, das Resultat einmal zwischenzuspeichern (z. B. Länge in eine Variable) und damit weiterzurechnen.\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
} ]
}
}