AutoFeedback API

Result 07b36888-d8e4-4df7-b3a8-d07391fd922e

{
  "llm" : {
    "feedback" : "# Exercise: textanalysis\n\n### Correctness\n\n### Suggestion\n\n### Code Style\n- Du importierst `java.util.Map`, verwendest den Typ aber nirgends; den Import kannst du entfernen.\n- Statt `HashMap<String, Integer>` als Feldtyp könntest du den Interface-Typ `Map<String, Integer>` verwenden; das macht die Implementierung austauschbarer (die konkrete Map bleibt intern trotzdem eine `HashMap`).\n\n\n# Exercise: lotto\n\n### Correctness\n- `Lottery.buyTicket` ist nicht implementiert und gibt immer `null` zurück; damit können keine gültigen Lose erstellt werden (IDs, Validierung, State-Checks fehlen).\n- `Lottery.draw` ist nicht implementiert; es werden keine 6 zufälligen, verschiedenen Gewinnzahlen gezogen und gespeichert (State-Check fehlt ebenfalls).\n- Im `Ticket`-Konstruktor werden die übergebenen Zahlen nicht gespeichert; 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 6 Ticket-Zahlen (als Kopie) zurückzugeben.\n- `Ticket.getCorrectNumbers` ist nicht implementiert und gibt `null` zurück; außerdem fehlt die geforderte `IllegalStateException` vor der Ziehung.\n- `Ticket.getPrize` ist nicht implementiert und gibt immer `0` zurück; die Gewinnlogik (5 CHF bei 1 Treffer, danach jeweils *20) und die `IllegalStateException` vor der Ziehung fehlen.\n\n### Suggestion\n- Bei `buyTicket`: Überlege dir zuerst die Zustandsregel („nach draw keine Tickets mehr“) und prüfe das ganz am Anfang, bevor du irgendetwas zählst oder erstellst.\n- Für die Validierung in `buyTicket`: Denke an genau drei Checks: **Anzahl = 6**, **Bereich 1..maxNumber**, **keine Duplikate**. Eine `Set`-Struktur hilft dir, „verschieden“ sauber zu prüfen.\n- Für die Ticket-ID: Nutze `soldTickets` so, dass das erste Ticket wirklich ID 1 erhält und jede weitere ID fortlaufend ist.\n- Bei `draw`: Du brauchst eine Datenstruktur, die automatisch keine Duplikate zulässt, und eine Schleife, bis genau 6 Werte drin sind. Vergiss nicht den Zustandscheck („draw nur einmal“).\n- Im `Ticket`: Lege eine Instanzvariable für die 6 Zahlen an. Wichtig: Speichere sie so, dass spätere Änderungen von außen deine internen Daten nicht verändern (z. B. durch Kopie/geeignete Collection).\n- Bei `getNumbers`: Gib nicht die interne Sammlung direkt zurück, sondern eine Kopie/neu erzeugtes Array, damit der Client nichts „kaputtändern“ kann.\n- Bei `getCorrectNumbers`: Rufe die Gewinnzahlen über die `lottery`-Referenz ab (das erzwingt automatisch den „erst nach draw“-Zustand) und bilde die Schnittmenge aus Ticket-Zahlen und Gewinnzahlen.\n- Bei `getPrize`: Verwende die Anzahl korrekter Zahlen als Basis. Starte bei 0 Treffern mit 0, bei 1 Treffer mit BASE_PRIZE, und pro zusätzlichem Treffer vervielfachen (MULTIPLIER) – ohne die konkrete Rechnung „hart zu codieren“.\n\n### Code Style\n- Die TODOs/Stub-Rückgaben (`return null`, `return 0`) sind im Abgabezustand problematisch; entferne diese Platzhalter, sobald implementiert.\n- In `Ticket` ist aktuell kein Import für Collections vorhanden (noch okay, weil nicht genutzt), aber sobald du eine Collection als Instanzvariable einführst, achte auf passende Imports und darauf, nur benötigte Imports zu behalten.\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
    } ]
  }
}