AutoFeedback API

Result 533679bf-a390-4f79-80f9-39c127596adb

{
  "llm" : {
    "feedback" : "# Exercise: textanalysis\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n\n\n# Exercise: lotto\n\n### Correctness\n- `Lottery.buyTicket` verhindert nicht, dass nach der Ziehung noch Lose gekauft werden (es fehlt der `IllegalStateException`-Check, wenn bereits gezogen wurde).\n- `Lottery.draw` ist nicht implementiert: Es werden keine 6 zufälligen, verschiedenen Gewinnzahlen gezogen/gespeichert und der “nur einmal draw()”-Zustand wird nicht durchgesetzt.\n- In `Ticket` sind `getNumbers`, `getCorrectNumbers` und `getPrize` nicht implementiert und liefern aktuell `null` bzw. `0`; damit kann die App/Tests nicht korrekt funktionieren.\n- `Ticket.getCorrectNumbers` und `Ticket.getPrize` müssen vor der Ziehung eine `IllegalStateException` werfen; das Verhalten ist aktuell nicht umgesetzt (weil die Methoden fehlen).\n- `Lottery.buyTicket` prüft nicht explizit, dass wirklich **genau 6 Werte übergeben** wurden (bei `null`/falscher Länge kann dein `List.of(numbers)` bzw. späterer Code unerwartet reagieren; gefordert ist eine klare Validierung und dann `IllegalArgumentException`).\n\n### Suggestion\n- In `buyTicket`: Überlege dir, welche Lotterie-Methoden nur “vor der Ziehung” erlaubt sind, und nutze dafür deinen vorhandenen Zustand (`hasDrawn()` / `winningNumbers != null`), um früh eine `IllegalStateException` zu werfen.\n- Für `draw`: Du brauchst eine Datenstruktur, die automatisch Duplikate verhindert, und eine Schleife, die so lange Zufallszahlen erzeugt, bis genau 6 verschiedene drin sind; zusätzlich am Anfang prüfen, ob schon einmal gezogen wurde.\n- Für `Ticket.getNumbers`: Gib eine **Kopie** deiner gespeicherten Zahlen zurück (nicht die interne Collection selbst). Da du intern ein `HashSet` nutzt, bietet sich eine Umwandlung in ein neues Array an.\n- Für `getCorrectNumbers`: Besorge dir die Gewinnzahlen über die Referenz auf `lottery` (und damit ist auch automatisch “vor Ziehung” abgedeckt, wenn `lottery.getWinningNumbers()` dann wirft). Schneide dann die Ticket-Zahlen mit den Gewinnzahlen (Schnittmenge), ohne die Original-Gewinnzahlen dauerhaft zu verändern.\n- Für `getPrize`: Bestimme zuerst, wie viele korrekte Zahlen es gibt, und wende dann die Preisregel an (0 → 0, 1 → 5, jede weitere Zahl → *20). Achte darauf, dass du nicht “immer mit 20 potenzierst”, wenn 0 Treffer da sind.\n\n### Code Style\n- Die Exception-Messages in `buyTicket` sind sehr spezifisch/umgangssprachlich; die Tests erwarten oft nur den Exception-Typ, nicht den Text. Einheitliche, knappe Messages (oder gar keine) machen es robuster.\n- `import java.util.List;` wird nur für `List.of(numbers)` genutzt; du könntest die Validierung auch ohne dieses Extra machen (ist aber optional).\n",
    "status" : "SUCCESS"
  },
  "unitTest" : {
    "tests" : [ {
      "name" : "buyTicketIds()",
      "status" : "PASSED",
      "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" : "Expected java.lang.Exception to be thrown, but nothing was thrown."
    } ]
  }
}