AutoFeedback API

Result 17a09ff4-8e2a-409f-acbb-23ce3674eb04

{
  "llm" : {
    "feedback" : "# Exercise: floodfill\n\n### Correctness\n- In `DrawingApp` soll gemäss Aufgabenstellung je **ein Feld** für `ColorReplace` und `RecursiveFloodFill` existieren (nicht nur eine `List<FillAlgorithm>`); aktuell hast du nur eine Liste.\n- Die Statuszeile soll den aktuell gewählten Algorithmus via `toString()` anzeigen; du zeigst zwar `\"↑↓ \" + algorithms.get(...)`, aber dein `RecursiveFloodFill.toString()` liefert `\"RecursiveFloodFill\"` statt einer gut lesbaren Bezeichnung (wie in der Aufgabe angedeutet).\n\n### Suggestion\n- Überlege, wie du analog zur Farbauswahl zwei separate Algorithmus-Objekte als Felder halten kannst und dann beim Rechtsklick je nach Index eines davon auswählst (Index bleibt dabei wie jetzt).\n- Passe die `toString()`-Ausgabe deiner Algorithmus-Klassen so an, dass in der Statuszeile wirklich ein “sprechender” Name erscheint (das ist genau der Sinn, weshalb die Aufgabe auf `toString()` verweist).\n\n### Code Style\n- In `ColorReplace` wäre es konsistenter, `@Override` auch über `fill` zu setzen (wie bei `toString()`), damit sofort klar ist, dass du die Interface-Methode implementierst.\n- Bei `RecursiveFloodFill` ist die Reihenfolge der vier rekursiven Aufrufe “magisch” im Code; ein kurzer Kommentar (z.B. welche Richtung welcher Aufruf ist) würde die Lesbarkeit deutlich erhöhen.\n\n\n# Exercise: flashcard\n\n### Correctness\n- Die Session-Zusammenstellung entspricht nicht der Aufgabenbeschreibung: Bei 3 Fächern sollen z. B. **8/4/2** Karten drankommen, deine Formel liefert aber für Fach 3 **2**, für Fach 4 **1** (ok) – jedoch erzwingst du außerdem mit `Math.max(1, ...)` auch in sehr hohen Fächern immer mindestens 1 Karte, was vom vorgegebenen Schema abweichen kann.\n- Beim richtigen Beantworten im **letzten Fach** entfernst du die Karte aus dem System und fügst sie nirgends wieder ein (sie “verschwindet”), obwohl in der Beschreibung nur steht “wandert in das nächsthöhere Fach (falls möglich)” – im letzten Fach sollte sie damit typischerweise dort bleiben.\n\n### Suggestion\n- Schau dir für die Session-Regel nochmal genau an, ob du wirklich eine “mindestens 1”-Regel brauchst, oder ob du stattdessen ein festes/parametrisierbares Verteilungsschema (z. B. Halbierung pro Fach) ohne erzwungenes Minimum umsetzt, sodass z. B. bei 3 Fächern genau 8/4/2 herauskommt.\n- Überlege, was “falls möglich” beim Hochstufen aus dem letzten Fach bedeutet: Wenn es kein nächstes Fach gibt, sollte die Karte eher im letzten Fach verbleiben, statt aus allen Fächern entfernt zu werden.\n\n### Code Style\n- In `FlashCardSystem` ist das Feld `compartments` redundant, weil `boxes.size()` dieselbe Information enthält; das reduziert das Risiko, dass die Werte irgendwann auseinanderlaufen.\n- `getSessionCards()` iteriert direkt über die Sets und bricht ab; wenn du später mal die Auswahl-/Mischlogik ändern willst, wäre es lesbarer, die “wie viele pro Fach”-Logik klar von der “welche Karten nehme ich”-Logik zu trennen.\n- `FlashCardApp.main()` ist recht lang (Session-Loop, IO, Auswertung, Wiederholung). Für bessere Lesbarkeit könntest du einzelne Schritte (eine Session durchführen, eine Karte abfragen, etc.) in private Methoden auslagern.\n\n\n# Exercise: imagestats\n\n### Correctness\n- Du hast das Problem bereits gelöst, indem du `hashCode()` implementiert hast; die Aufgabe verlangt aber ausdrücklich, das Problem nur zu untersuchen und ein Minimalbeispiel zu erstellen („Du musst das Problem aber nicht lösen“).\n\n### Suggestion\n- Lass die Implementierung von `hashCode()` wieder weg und zeige stattdessen mit einem kleinen, eigenständigen Minimalbeispiel (z.B. `HashMap`/`HashSet` + zweimal „gleiche“ `Color` einfügen), dass trotz `equals()` Duplikate entstehen.\n- Formuliere in deinem Abgabe-Text/Code klar die Hypothese, woran es liegt (Stichwort: was `HashMap`/`HashSet` zusätzlich zu `equals()` noch brauchen, um Duplikate zu erkennen), ohne es direkt zu fixen.\n\n### Code Style\n- `toString()` sollte (wie `equals()`/`hashCode()`) ebenfalls mit `@Override` annotiert werden, damit der Compiler dich bei Tippfehlern/Signaturproblemen warnen kann.\n",
    "status" : "SUCCESS"
  }
}