AutoFeedback API

Result ee1e1c2d-a63e-4ab4-8c4b-fe883d089648

{
  "llm" : {
    "feedback" : "# Exercise: textanalysis\n\n### Correctness\n\n\n### Suggestion\n\n\n### Code Style\n- Du importierst `Map` nur für `Map.Entry` im Loop; das ist ok, aber du könntest den Loop auch mit `var` schreiben, um es etwas schlanker zu halten.\n- In `topWord()` ist `maxCount = Integer.MIN_VALUE` funktional, aber für die Lesbarkeit reicht meist ein Startwert wie `0`, wenn du ohnehin vorher auf `isEmpty()` prüfst.\n- In `add()` rufst du bei vorhandenem Key sowohl `containsKey` als auch `get` auf; mit einem einzelnen `get`-Aufruf (und Null-Check) oder `getOrDefault` könntest du die Map nur einmal nachschlagen.\n\n\n# Exercise: lotto\n\n### Correctness\n- `Lottery.buyTicket` ist nicht implementiert und gibt immer `null` zurück; damit werden keine Tickets erstellt, keine IDs vergeben und keine Validierung der 6 Zahlen durchgeführt.\n- `Lottery.draw` ist nicht implementiert; es werden keine 6 verschiedenen Gewinnzahlen gezogen und gespeichert, und der “nur einmal draw”-Zustand wird nicht umgesetzt.\n- In `Ticket` fehlt die Speicherung der Ticket-Zahlen im Konstruktor; dadurch können `getNumbers`, `getCorrectNumbers` und `getPrize` nicht korrekt funktionieren.\n- `Ticket.getNumbers` ist nicht implementiert und gibt `null` zurück; damit verletzt du die Anforderung, die sechs Zahlen (als Kopie) zurückzugeben.\n- `Ticket.getCorrectNumbers` ist nicht implementiert und gibt `null` zurück; zudem fehlt damit auch das geforderte Verhalten, vor der Ziehung eine `IllegalStateException` auszulösen.\n- `Ticket.getPrize` ist nicht implementiert und liefert immer `0`; damit wird die geforderte Gewinnlogik (5 CHF bei 1 richtigen Zahl, danach jeweils *20) nicht erfüllt.\n\n### Suggestion\n- Bei `buyTicket`: Überlege dir eine Reihenfolge aus (a) Zustandscheck “schon gezogen?”, (b) Check “genau 6 Zahlen?”, (c) Bereichscheck 1..maxNumber, (d) Duplikate verhindern (eine Collection, die keine Duplikate erlaubt, hilft hier sehr), und erst danach Ticket-ID erhöhen und ein Ticket erzeugen.\n- Bei `draw`: Du brauchst 6 zufällige **verschiedene** Zahlen zwischen 1 und `maxNumber`; nimm eine Collection, die automatisch “verschiedene” erzwingt, und fülle sie in einer Schleife, bis die Größe 6 ist. Denk auch an den Zustandscheck: wenn bereits gezogen wurde, Exception.\n- Im `Ticket`-Konstruktor: Lege eine zusätzliche Instanzvariable für die Zahlen an und kopiere die übergebenen Zahlen dort hinein (nicht nur Referenz weiterreichen), damit sie später unverändert bleiben.\n- Für `getNumbers`: Gib eine Kopie deiner gespeicherten Zahlen zurück (nicht die interne Datenstruktur), sonst könnten Aufrufer deine Ticketzahlen nachträglich verändern.\n- Für `getCorrectNumbers`: Die Methode soll erst nach der Ziehung funktionieren; du kannst dafür über die `Lottery`-Referenz die Gewinnzahlen beziehen (die wirft vor der Ziehung bereits eine `IllegalStateException`). Dann bilde die Schnittmenge aus Ticketzahlen und Gewinnzahlen.\n- Für `getPrize`: Nimm als Basis die Anzahl korrekter Zahlen und rechne daraus den Betrag: bei 0 → 0, bei 1 → `BASE_PRIZE`, und pro weiterer richtiger Zahl jeweils Multiplikation mit `MULTIPLIER`.\n\n### Code Style\n- Du hast noch viele `// TODO`-Platzhalter und `return null`/`return 0`; entferne diese, sobald du implementiert hast, damit klar ist, dass die Aufgaben erledigt sind.\n- In `Ticket` ist aktuell nur `Arrays` importiert; je nach gewählter Datenstruktur werden zusätzliche Imports nötig (und unbenötigte sollten dann entfernt werden).\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
    } ]
  }
}