AutoFeedback API

Result 87e978a2-5544-4807-a9d6-4872c23753fe

{
  "llm" : {
    "feedback" : "# Exercise: textanalysis\n\n### Correctness\n\n### Suggestion\n\n### Code Style\n- `import java.security.Key;` ist unbenutzt und sollte entfernt werden.\n- `import java.util.*;` ist sehr breit; besser die konkret verwendeten Klassen importieren (z.B. `ArrayList`, `Map`, `HashMap`, `Collections`), damit klarer ist, was gebraucht wird.\n- Du baust in `topWord()` bei jedem Aufruf die Häufigkeits-Map neu aus der Liste auf. Das funktioniert zwar, ist aber unnötig teuer für große Texte; sinnvoller ist, die Häufigkeiten schon beim `add()` in einer passenden Datenstruktur mitzuführen, sodass `topWord()` nur noch darüber iterieren muss.\n\n\n# Exercise: lotto\n\n### Correctness\n- `Lottery.buyTicket` prüft nicht, ob bereits gezogen wurde; nach `draw()` müssen weitere Ticket-Käufe eine `IllegalStateException` werfen.\n- `Lottery.buyTicket` validiert die Zahlen nicht vollständig: Es wird nur `numbers.length == 6` geprüft, aber nicht ob alle Zahlen im Bereich `1..maxNumber` liegen und ob alle 6 Zahlen verschieden sind.\n- Ticket-IDs starten bei dir mit `0` und sind unabhängig von `soldTickets`; gefordert ist: erstes Ticket ID 1, dann 2, usw. (und die Tests erwarten das typischerweise).\n- `soldTickets` wird in `buyTicket` nie erhöht, dadurch stimmt `getSoldTickets()` nicht mit den verkauften Tickets überein.\n- `Lottery.draw` ist nicht implementiert (Gewinnzahlen werden nie gezogen/gesetzt), damit funktionieren `hasDrawn()`/`getWinningNumbers()` und die dazugehörigen Tests nicht.\n- In `Ticket` fehlen Konstruktor-Logik (Zahlen speichern) sowie die Implementationen von `getNumbers`, `getCorrectNumbers` und `getPrize`; damit kann das Ticket weder seine Zahlen zurückgeben noch korrekte Zahlen/Gewinn berechnen.\n- `getCorrectNumbers` und `getPrize` müssen vor der Ziehung eine `IllegalStateException` auslösen (direkt oder indirekt); aktuell ist es unimplementiert, also entspricht das Verhalten nicht den Anforderungen.\n\n### Suggestion\n- Nutze in `buyTicket` den Zustand der Lotterie (z. B. über `hasDrawn()` bzw. `winningNumbers`) um vor/nach der Ziehung korrekt zu unterscheiden und im falschen Zustand gezielt `IllegalStateException` zu werfen.\n- Für die Zahlenvalidierung: Überlege dir eine Collection, mit der du Duplikate leicht erkennst (z. B. Set) und prüfe beim Durchlaufen zusätzlich den Wertebereich `1..maxNumber`.\n- Richte die ID-Vergabe so aus, dass sie mit der Anzahl verkaufter Tickets zusammenhängt (und bei 1 beginnt), statt eine separate Zählvariable zu führen, die bei 0 startet.\n- Implementiere `draw()` so, dass wirklich 6 *verschiedene* Zufallszahlen entstehen und danach gespeichert sind; eine Set-Struktur hilft auch hier, um Unterschiede automatisch sicherzustellen.\n- Im `Ticket` brauchst du eine Instanzvariable, die die 6 Zahlen des Tickets speichert; `getNumbers()` sollte davon eine Kopie zurückgeben, damit der Aufrufer das Ticket nicht nachträglich verändern kann.\n- Für `getCorrectNumbers()`: Vergleiche die Ticket-Zahlen mit den Gewinnzahlen der zugehörigen `lottery` und gib nur die Schnittmenge zurück; achte darauf, dass du dabei nicht aus Versehen interne Daten der Lotterie veränderst.\n- Für `getPrize()`: Leite den Gewinn ausschließlich aus der Anzahl korrekter Zahlen ab (0 → 0, 1 → 5, jede weitere Zahl vervielfacht) und stelle sicher, dass das erst nach der Ziehung möglich ist.\n\n### Code Style\n- Entferne `System.out.println(numbers.length);` aus `buyTicket` (Debug-Ausgabe stört Tests/Programm-Ausgabe).\n- `import java.util.Arrays;` in `Lottery` ist unbenutzt.\n- Das Feld `id` in `Lottery` ist redundant/irreführend neben `soldTickets`; besser nur einen konsistenten Zähler verwenden (und keine unnötigen Felder pflegen).\n- Der Aufruf `t.getNumbers();` in `buyTicket` hat keinen Effekt und sollte weg (unnötiger Seiteneffekt/„toter“ Code).\n",
    "status" : "SUCCESS"
  },
  "unitTest" : {
    "tests" : [ {
      "name" : "buyTicketIds()",
      "status" : "FAILED",
      "message" : "expected: <1> but was: <0>"
    }, {
      "name" : "buyTicketsIllegalNumbers()",
      "status" : "FAILED",
      "message" : "Expected java.lang.Exception to be thrown, but nothing was thrown."
    }, {
      "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."
    } ]
  }
}