AutoFeedback API

Result e55ad699-a24d-43dd-bae5-e33269fe9e84

{
  "llm" : {
    "feedback" : "# Exercise: textanalysis\n\n### Correctness\n- Deine Klasse `WordCounter` speichert keine gezählten Wörter dauerhaft: In `add` erstellst du jedes Mal eine neue `Map`, dadurch geht die bisher gesammelte Information bei jedem Aufruf verloren.\n- `topWord()` ist nicht implementiert und gibt immer `\"\"` zurück, statt das häufigste Wort zu liefern.\n- `add(String word)` zählt aktuell keine Häufigkeiten: Die Schleife über `arr` ist leer und es wird nichts in eine Datenstruktur eingetragen.\n- `add` soll ein einzelnes Wort hinzufügen (so wie `TextAnalyzer` es verwendet); das zusätzliche `split(\" \")` passt nicht zu diesem Aufrufmuster und verhindert korrektes Zählen, wenn es leer/unnötig ist.\n\n### Suggestion\n- Lege die Datenstruktur zum Zählen als Feld in der Klasse an (nicht lokal in `add`), damit die Zählwerte über viele `add`-Aufrufe hinweg erhalten bleiben.\n- In `add` brauchst du für das übergebene Wort im Wesentlichen: aktuellen Zähler aus der Map holen (oder 0, falls nicht vorhanden) und um 1 erhöhen.\n- In `topWord` solltest du über alle gespeicherten Wörter/Zähler iterieren und dir das Wort mit dem größten Zähler merken; bei Gleichstand darfst du eines davon nehmen.\n\n### Code Style\n- `TextAnalyzer ta = new TextAnalyzer();` in `add` ist unbenutzt und fachlich nicht Teil der Aufgabe—entfernen.\n- `System.out.println(arr);` druckt bei Arrays nicht den Inhalt, sondern eine Referenz (z.B. `[Ljava.lang.String;@...`) und ist zudem Debug-Ausgabe; für die Abgabe weglassen.\n- Unbenutzte Imports (`TreeMap`, `Map`) vermeiden bzw. nur importieren, was du wirklich verwendest.\n- Der Kommentar `// TODO` bleibt stehen, obwohl du schon Code geschrieben hast; entweder umsetzen oder entfernen, damit klar ist, was noch fehlt.\n\n\n# Exercise: lotto\n\n### Correctness\n- `Lottery.buyTicket` ist nicht implementiert und gibt immer `null` zurück; damit können keine Tickets gekauft werden (IDs werden nicht vergeben, Validierung fehlt).\n- `Lottery.draw` ist nicht implementiert; damit werden nie 6 zufällige, verschiedene Gewinnzahlen gezogen/gespeichert.\n- `Ticket` speichert die übergebenen Zahlen nicht (fehlende Instanzvariable + fehlende Speicherung im Konstruktor).\n- `Ticket.getNumbers` ist nicht implementiert und gibt `null` zurück; damit funktionieren Ausgabe/Weiterverarbeitung nicht.\n- `Ticket.getCorrectNumbers` ist nicht implementiert und gibt `null` zurück; damit kann nach der Ziehung keine Übereinstimmung berechnet werden.\n- `Ticket.getPrize` ist nicht implementiert und gibt immer `0` zurück; damit wird der Gewinn nie korrekt berechnet.\n- Die Zustandsregeln („vor/nach Ziehung“) werden noch nicht umgesetzt: z.B. `buyTicket` muss nach `draw` eine `IllegalStateException` werfen und `draw` darf nicht mehrfach ausgeführt werden.\n\n### Suggestion\n- In `buyTicket`: prüfe zuerst den Zustand (ob schon gezogen wurde), dann die Eingabe (genau 6 Werte, Bereich 1..maxNumber, keine Duplikate) und erhöhe erst danach den Ticket-Zähler für die neue ID.\n- Für die „6 verschiedene Zahlen“-Prüfung bietet sich eine Collection an, die Duplikate automatisch verhindert; über deren Größe kannst du dann auch erkennen, ob alle verschieden waren.\n- In `draw`: initialisiere eine Collection für die Gewinnzahlen und füge so lange zufällige Zahlen hinzu, bis genau 6 verschiedene drin sind; achte darauf, dass `draw` beim zweiten Aufruf den illegalen Zustand erkennt.\n- In `Ticket`: entscheide dich für eine passende Datenstruktur als Instanzvariable (z.B. Set oder Liste), kopiere die übergebenen Zahlen dort hinein und gib in `getNumbers` immer eine Kopie zurück.\n- Für `getCorrectNumbers`: hole dir die Gewinnzahlen über die Lottery-Referenz (damit kommt automatisch die `IllegalStateException` vor der Ziehung) und berechne die Schnittmenge mit den Ticket-Zahlen.\n- Für `getPrize`: nutze die Anzahl korrekter Zahlen als Basis; bei 0 korrekt => 0, bei 1 korrekt => Basispreis, und jede weitere korrekte Zahl multipliziert den aktuellen Gewinn mit dem Multiplikator (ohne eine Hardcode-Tabelle).\n\n### Code Style\n- Entferne die `// TODO`-Platzhalter, sobald du implementiert hast, damit klar ist, welche Teile fertig sind.\n- Achte darauf, dass Rückgaben wie `null` in `getNumbers/getCorrectNumbers` später komplett verschwinden, weil sonst auch `toString()` und Ausgaben sehr schnell in NullPointer-Probleme laufen.\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.IllegalStateException to be thrown, but nothing was thrown."
    }, {
      "name" : "getWinningNumbersNotDrawnYet()",
      "status" : "FAILED",
      "message" : "Unexpected exception type thrown, expected: <java.lang.IllegalStateException> but was: <java.lang.reflect.UndeclaredThrowableException>"
    }, {
      "name" : "buyTicketAlreadyDrawn()",
      "status" : "FAILED",
      "message" : null
    } ]
  }
}