AutoFeedback API

Result 32e19197-4807-4409-b234-e6ce613dfd6d

{
  "llm" : {
    "feedback" : "# Exercise: textanalysis\n\n### Correctness\n- `topWord()` gibt bei leerer Datenstruktur den String `\"Nothing to count\"` zurück; gefordert ist, „das am häufigsten vorkommende Wort“ zurückzugeben (also ein Wort aus den hinzugefügten Wörtern). Ein fester Text ist kein Wort aus dem Input und passt damit nicht zur Spezifikation.\n\n### Suggestion\n- Überlege dir, was `topWord()` liefern soll, wenn noch kein Wort per `add(...)` hinzugefügt wurde (z.B. leeren String wie in der Vorlage, oder ein anderer klar definierter Rückgabewert) und stelle sicher, dass der Rückgabewert in allen Fällen ein „Wort“ aus den hinzugefügten Wörtern ist, nicht eine Statusmeldung.\n\n### Code Style\n- Unnötige Imports: `java.security.Key` wird nicht verwendet; außerdem ist `import java.util.*;` sehr breit—importiere lieber nur die Klassen, die du wirklich nutzt.\n- Du baust die Häufigkeits-Map jedes Mal in `topWord()` neu aus der `words`-Liste auf; das ist zwar funktional, aber die Aufgabe deutet an, dass du die „relevante Information“ beim Hinzufügen sammeln sollst (interne Datenstruktur für Zählungen), statt alles beim Auslesen neu zu berechnen.\n\n\n# Exercise: lotto\n\n### Correctness\n- `Lottery.buyTicket` ist nicht implementiert und gibt aktuell immer `null` zurück; damit werden weder Tickets erstellt noch IDs vergeben noch die geforderten Validierungen (genau 6 Zahlen, Bereich 1..maxNumber, alle verschieden) durchgeführt.\n- Der Zustandscheck fehlt dadurch ebenfalls: Nach der Ziehung darf man keine Tickets mehr kaufen (`IllegalStateException`).\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` fehlt die Speicherung der 6 Ticket-Zahlen in einer Instanzvariablen; dadurch können `getNumbers`, `getCorrectNumbers` und `getPrize` nicht korrekt arbeiten.\n- `Ticket.getNumbers` ist nicht implementiert und gibt `null` zurück, obwohl es die sechs Zahlen (als Kopie) liefern muss.\n- `Ticket.getCorrectNumbers` ist nicht implementiert und gibt `null` zurück; außerdem muss die Methode vor der Ziehung eine `IllegalStateException` auslösen (über den Zugriff auf die Gewinnzahlen der Lottery).\n- `Ticket.getPrize` ist nicht implementiert (liefert immer 0); die Gewinnlogik (0→0, 1→5, jede weitere Zahl *20) fehlt und muss ebenfalls nur nach der Ziehung funktionieren.\n\n### Suggestion\n- Starte bei `buyTicket`: Überlege dir zuerst die Reihenfolge „Zustand prüfen“ (wurde schon gezogen?), dann „Eingaben prüfen“ (Länge 6, Wertebereich, Duplikate), und erst danach „ID hochzählen und Ticket erzeugen“.\n- Für die Duplikatprüfung bietet sich eine Collection an, die keine Doppelten zulässt; wenn am Ende nicht genau 6 unterschiedliche Elemente drin sind, ist die Eingabe ungültig.\n- Für `draw`: Du brauchst eine Struktur, die automatisch „verschiedene“ Zahlen sicherstellt, und füllst sie per Zufall so lange, bis genau 6 Zahlen drin sind; davor/nachher musst du den State korrekt behandeln (vorher erlaubt, nachher `IllegalStateException`).\n- In `Ticket`: Lege eine Instanzvariable für die 6 Zahlen an (Collection oder Array) und befülle sie im Konstruktor aus dem `numbers`-Parameter; danach sollten alle Methoden mit dieser gespeicherten Version arbeiten.\n- `getNumbers` soll eine Kopie zurückgeben: gib nicht direkt deine interne Datenstruktur zurück, sondern erzeuge daraus ein neues Array.\n- `getCorrectNumbers`: Hole dir die Gewinnzahlen über die `lottery`-Referenz (das erzwingt automatisch den „nur nach draw()“-Zustand, weil `getWinningNumbers` vorher schon `IllegalStateException` wirft) und bilde dann die Schnittmenge mit deinen Ticket-Zahlen.\n- `getPrize`: Nutze die Anzahl korrekter Zahlen aus `getCorrectNumbers().length` und wende dann die geforderte Staffelung an (bei 0 sofort 0; sonst mit Basiswert starten und pro zusätzlicher korrekter Zahl mit dem Multiplikator weiterrechnen).\n\n### Code Style\n- In den unimplementierten Methoden stehen noch `// TODO` plus Dummy-Returns (`null`, `0`); entferne diese Platzhalter, sobald du die echte Logik eingebaut hast, damit keine „scheinbar funktionierenden“ Rückgaben mehr übrig bleiben.\n- Achte darauf, dass die Javadoc-Kommentare zu den Rückgabetypen passen: Bei `getNumbers` steht „als ArrayList“, die Signatur gibt aber `Integer[]` zurück—halte Kommentar und Signatur konsistent (oder passe den Kommentar an, nicht die Signatur).\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
    } ]
  }
}