{
"llm" : {
"feedback" : "# Exercise: floodfill\n\n### Correctness\n- In `RecursiveFloodFill` prüfst du `img.getPixel(x, y)` bevor du sicherstellst, dass `x`/`y` innerhalb der Bildgrenzen liegen; bei Rekursionsaufrufen mit `x=-1` oder `y=-1` führt das zu einem Index-Fehler statt sauberem Abbruch.\n- Die Boundary-Checks sind off-by-one: `x > img.getWidth()` bzw. `y > img.getHeight()` lässt `x == img.getWidth()` durch (das ist bereits ausserhalb, erlaubt ist nur `< getWidth()`), gleiches für `y`.\n- Dein rekursiver Algorithmus nutzt nicht die Farbe des Startpixels als Kriterium (oldColor), sondern färbt praktisch alles um, bis er auf bereits `newColor` gefärbte Pixel trifft; das ist kein Flood-Fill-Verhalten “nur zusammenhängende Fläche gleicher Startfarbe”.\n- Du brichst Rekursion nur ab, wenn das Pixel bereits `newColor` hat; dadurch werden auch Pixel mit “falscher” Ausgangsfarbe trotzdem überschrieben (solange sie noch nicht `newColor` sind).\n- In `DrawingApp` veränderst du beim Wechsel des Algorithmus-Mode (`up`/`down`) fälschlicherweise `colorIndex`-Wrapping; das hat mit dem Algorithmuswechsel nichts zu tun und kann die Farbauswahl unbeabsichtigt beeinflussen.\n- Das Umschalten mit `↑`/`↓` ist nicht wirklich ein “Wechseln” im Sinne der Aufgabe (toggle/zyklisch), sondern `↑` setzt immer auf `ColorReplace` und `↓` immer auf `RecursiveFloodFill` (kein echtes Hin- und Herspringen/Status wie bei den Farben).\n\n### Suggestion\n- Setze bei der rekursiven Methode als allererstes einen Basisfall, der Out-of-Bounds abfängt, **bevor** du irgendein Pixel aus dem Bild liest.\n- Überlege dir genau die Vergleichsfarbe für Flood Fill: Du brauchst die Farbe des Startpixels als Referenz (“oldColor”) und musst bei jedem Rekursionsschritt prüfen, ob das aktuelle Pixel noch diese Referenzfarbe hat.\n- Damit die Rekursion garantiert fortschreitet und nicht wieder zurückläuft, ist es hilfreich, ein Pixel direkt beim Besuch umzusetzen (auf `newColor`), sodass spätere Besuche daran scheitern; aber der Abbruch sollte trotzdem über “ist nicht oldColor” formuliert sein (nicht über “ist newColor”).\n- Achte bei Grenzen auf `>= getWidth()`/`>= getHeight()` statt `>`; zeichne dir kurz die erlaubten Indizes (0 bis width-1) auf.\n- Für den Algorithmuswechsel: orientiere dich an deiner Farblogik (Index rauf/runter + modulo). Du kannst das gleiche Prinzip mit einer Liste/Index auch für Algorithmen anwenden oder wenigstens wirklich toggeln, statt hart zu setzen.\n- Entferne beim Algorithmuswechsel alles, was die Farbauswahl beeinflusst (das Wrapping von `colorIndex` gehört nicht in den `up`/`down`-Block).\n\n### Code Style\n- Benenne Felder nicht wie Klassen (`private final FillAlgorithm ColorReplace` / `RecursiveFloodFill`): das wirkt wie ein Typ und macht Code schwer lesbar; nutze typische camelCase-Namen für Variablen/Objekte.\n- In `FillAlgorithm` musst du `toString()` nicht deklarieren (kommt bereits von `Object`); es reicht, wenn die Klassen `toString()` überschreiben.\n- `testFarbeRec` gibt `boolean` zurück, aber der Rückgabewert wird nicht sinnvoll genutzt (und die Methode wird auch primär wegen Side-Effects verwendet); entweder konsequent verwenden oder Rückgabewert weglassen, um die Intention klarer zu machen.\n\n\n# Exercise: flashcard\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n\n\n# Exercise: imagestats\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n",
"status" : "SUCCESS"
}
}