AutoFeedback API

Result a173dcc2-f746-4af1-a518-8176f9be5af5

{
  "llm" : {
    "feedback" : "# Exercise: textanalysis\n\n### Correctness\n- `topWord()` wirft bei leerem Counter (`mostCommonWord == null`) eine `IllegalStateException`; die Aufgabenstellung verlangt nur, das häufigste Wort zurückzugeben, und macht keine Vorgabe, dass hier eine Exception geworfen werden soll.\n\n### Suggestion\n- Überlege dir, welches Verhalten `topWord()` haben soll, wenn noch kein Wort hinzugefügt wurde, und implementiere dieses Verhalten explizit (z.B. ein definierter Rückgabewert statt Exception), sodass das Testprogramm in diesem Fall nicht unerwartet abbricht.\n\n### Code Style\n- In `add()` rufst du mehrfach `wordOccurrence.get(word)` und `containsKey(word)` auf; lesbarer und effizienter wird es, wenn du den aktuellen Zähler einmal in eine lokale Variable holst oder eine Map-Operation verwendest, die “default”/“compute” unterstützt.\n- `topWord()` wirft eine Exception ohne Nachricht; falls du bei Exceptions bleibst, ist eine aussagekräftige Fehlermeldung hilfreicher fürs Debugging.\n- `TextAnalyzer.main()` ist stark von der Vorlage abweichend (fixer Pfad, andere Signatur); auch wenn du das kommentierst, ist das für Abgabe/Automatisches Testen typischerweise problematisch.\n\n\n# Exercise: lotto\n\n1. Correctness  \n- `draw()` verwendet `random.nextInt(1, maxNumber + 1)`: Diese Überladung existiert erst in neueren Java-Versionen; falls die Tests/Umgebung auf Java 8/11 laufen, kompiliert das nicht und die Ziehung funktioniert gar nicht.  \n- `Ticket.getCorrectNumbers()` und `Ticket.getPrize()` rufen `lottery.ifBeforeDrawException()` auf, aber diese Methode ist in `Lottery` nicht `public`; wenn die Testklassen in einem anderen Package liegen (üblich), ist das von `Ticket` aus zwar ok (gleiches Package), aber von außen darf man diese State-Checks nicht voraussetzen. Entscheidend ist: Die Exception-Logik soll über die geforderten öffentlichen Methoden laufen (z. B. indirekt über `getWinningNumbers()`), nicht über zusätzliche package-private Hilfsmethoden, die die Tests evtl. nicht berücksichtigen.  \n\n2. Suggestion  \n- Prüfe, welche Java-Version im Kurs/CI verwendet wird: Wenn es nicht garantiert Java 17+ ist, nutze bei `Random` eine Variante, die in älteren Versionen verfügbar ist, und rechne dir den Bereich 1..maxNumber selbst passend hin.  \n- Überlege bei den State-Checks in `Ticket`: Du brauchst nur sicherstellen, dass vor der Ziehung eine `IllegalStateException` kommt. Das erreichst du bereits, wenn du auf eine Methode zugreifst, die vor der Ziehung ohnehin genau diese Exception wirft (statt eine zusätzliche Lottery-Hilfsmethode direkt aufzurufen).  \n\n3. Code Style  \n- Unused imports in `Ticket`: `HashMap` wird nicht verwendet (entfernen).  \n- In `Lottery.getWinningNumbers()` ist der Check doppelt: erst `ifBeforeDrawException();` und danach nochmal `if (winningNumbers == null) ...`. Eins davon reicht.  \n- Die Hilfsmethoden `ifAfterDrawException()`/`ifBeforeDrawException()` sind package-private und werden von `Ticket` genutzt; das koppelt die Klassen unnötig eng. Wenn du solche Checks behältst, überlege zumindest eine klarere API-Grenze (oder nutze bestehende öffentliche Methoden als Guard).\n",
    "status" : "SUCCESS"
  },
  "unitTest" : {
    "tests" : [ {
      "name" : "buyTicketIds()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "buyTicketsIllegalNumbers()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "draw()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "drawNoDuplicates()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "drawRandom()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "drawAlreadyDrawn()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "getWinningNumbersNotDrawnYet()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "buyTicketAlreadyDrawn()",
      "status" : "PASSED",
      "message" : null
    } ]
  }
}