{
"llm" : {
"feedback" : "# Exercise: parking\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n\n\n# Exercise: labyrinth\n\n### Correctness\n- In `TryStraightFirst` fehlt der Fall “wenn vorne, links und rechts nicht geht, dann rechtsum kehrt machen”; aktuell bleibt die Figur in einer Sackgasse in einer Endlosschleife stehen (weil du nur drehst, wenn links/rechts möglich ist, aber nie umkehrst).\n- `BacktrackingAlgorithm` ist nicht so in `LabyrinthApp` verwendbar, wie das Framework es vorsieht: Du konstruierst den Algorithmus mit einem separaten `Labyrinth` (`new Labyrinth(MAPS[1])`), aber `game.play(navi)` übergibt dem Algorithmus eine `Figure` aus *einem anderen* `Labyrinth` (je Level ein neues). Dadurch prüfst du z.B. das Ziel (`labyrinth.goalAt(row,col)`) auf der falschen Map / mit falschen Dimensionen.\n- `BacktrackingAlgorithm.checkPath`: Du benutzt `labyrinth.goalAt(row, col)` statt die vorgesehene Abfrage über das `Figure`-Objekt (`figure.isGoalReached()`), und damit hängt die Korrektheit zusätzlich am (bei dir problematischen) `labyrinth`-Feld.\n- `BacktrackingAlgorithm.checkPath`: Der Backtracking-Teil nach einem rekursiven Aufruf macht immer “180° drehen, vorwärts, 180° drehen” ohne zu prüfen, ob der Rückweg tatsächlich frei ist; je nach Situation/Orientierung kann das dazu führen, dass du vom Pfad läufst und ein `GameOver` auslöst.\n- `BacktrackingAlgorithm.checkPath`: Im Fall “keine Wege” drehst du zwar um und rufst rekursiv auf, bewegst dich aber nicht zurück. Das ändert die Position nicht und kann zu unnötiger Rekursion bzw. Hängenbleiben führen (und markiert dann auch keine neuen Felder).\n\n### Suggestion\n- Für `TryStraightFirst`: Überlege dir eine vollständige If/Else-Kette, die **alle** vier Fälle aus der Aufgabenbeschreibung abdeckt (vorne, sonst links, sonst rechts, sonst umdrehen). Achte darauf, dass in jeder Iteration auch wirklich eine Aktion passiert, die dich aus einer Sackgasse wieder herausführt.\n- Für `BacktrackingAlgorithm`: Versuche den Algorithmus so zu bauen, dass er **nur** mit dem `Figure` arbeitet, das in `navigate(Figure figure)` reinkommt. Wenn du Infos über das Labyrinth brauchst, musst du sie aus dem Verhalten der Figure (Paths + Moves) ableiten, statt ein eigenes `Labyrinth`-Objekt zu speichern.\n- Für das Erkennen des Ziels im Backtracking: Nutze die dafür gedachte Methode am `Figure`-Interface, dann bist du unabhängig von Map-Zugriffen und vom aktuellen Level-Objekt.\n- Für das Zurückgehen (Backtracking): Denk in “ich bin einen Schritt gegangen, also muss ich beim Zurückgehen genau diesen Schritt rückgängig machen”. Das klappt nur zuverlässig, wenn du deine Drehungen/Bewegungen symmetrisch und in der richtigen Reihenfolge machst (und ggf. bevor du `moveForward()` zurück machst, sicherstellst, dass du auch wirklich in die Gegenrichtung schaust).\n- Für den Sackgassen-Fall im Backtracking: Wenn du umdrehst, muss typischerweise auch ein Schritt zurück passieren (sonst bleibst du auf dem gleichen Feld und kommst nicht aus der Sackgasse heraus).\n\n### Code Style\n- In `BacktrackingAlgorithm.navigate` sind die lokalen Variablen `col`/`row` (aus `labyrinth.cols()/rows()`) nur zur Array-Erzeugung da; benenne sie besser als `cols`/`rows`, damit klar ist, dass es Dimensionen sind (und nicht aktuelle Positionen).\n- Große auskommentierte Blöcke in `navigate` erschweren das Lesen; entferne sie, sobald du dich für eine Variante entschieden hast.\n- `BacktrackingAlgorithm` mischt Deutsch/Englisch bei Namen (`besucht` vs. `checkPath`); einheitliche Benennung macht den Code leichter nachvollziehbar.\n\n\n# Exercise: swissmap\n\n### Correctness\n- In `City`, `Lake` und `Mountain` verwendest du in `toString()` einen Zeilenumbruch (`\"\\n\"`), obwohl in der Aufgabenstellung bei Hover “die Beschreibung anzeigen” gemeint ist (wie im Screenshot typischerweise einzeilig). Dadurch wird die Darstellung beim Hover vermutlich nicht wie gefordert aussehen.\n- Deine `ModeButton`-Interaktionsfläche (`getInteractiveArea`) ist deutlich kleiner (15x15) als der Button, den du zeichnest (65x25). Damit ist der Button nicht über seine ganze sichtbare Fläche klick-/hoverbar, was das geforderte Verhalten (“als Knopf… wenn er geklickt wird”) verletzt.\n- Die verwendeten Bildpfade weichen von den in der Aufgabenstellung erwähnten Ressourcen ab (z.B. `\"swissmap_img/...\"` statt Ressourcen aus `resources` wie bei `SwissMap`). Wenn diese Dateien im Projekt nicht genau so existieren, werden Seen/Berge/Hintergrund nicht angezeigt.\n\n### Suggestion\n- Schau dir an, wie `Gui.drawString(...)` mit Zeilenumbrüchen umgeht und überlege, ob du die Beschreibung lieber als eine Zeile formatierst (oder separat platzierst), damit es “wie oben dargestellt” wirkt.\n- Mach die interaktive Fläche des `ModeButton` deckungsgleich (oder zumindest passend) zur gezeichneten Rechteckfläche: gleiche Position/Grösse wie in `draw(...)` verwenden.\n- Vergleiche deine Bildpfade mit denen, die `SwissMap` nutzt, und prüfe, wo die Dateien im Projekt wirklich liegen (Ordnername/Case/Classpath). Wenn du andere Namen nutzt, stelle sicher, dass sie auch tatsächlich im `resources`-Ordner so vorhanden sind.\n\n### Code Style\n- In `ModeButton` sind die Felder `hovered` und `clicked` aktuell ohne Effekt (sie werden gesetzt, aber nicht genutzt).\n- In `SwissMap` sowie `Mountain` sind Imports für `ImageIO`, `BufferedImage`, `IOException`, `Objects` vorhanden, werden aber nicht verwendet.\n- `System.out.println(...)` in `SwissMap.draw()` und `City.onMouseEnter()` erzeugt bei jedem Frame/Mouse-Event unnötige Konsolen-Ausgaben; das macht das Programm schnell “spammy” und erschwert Debugging.\n\n\n# Exercise: visualizer\n\n### Correctness\n- Das `DataPoint`-Interface stellt nicht die Informationen bereit, die der `Visualizer` für die Achsenwerte (x/y), Gruppierung/Farbe und die Hover-Anzeige (Titel + Detailtext) benötigt; stattdessen definierst du Setter-artige `void`-Methoden.\n- In `Visualizer` wurden die `DUMMY_DOUBLE`/`DUMMY_STRING`-Stellen nicht durch Aufrufe auf das jeweilige `DataPoint`-Objekt ersetzt, daher kann keine echte Visualisierung der Daten entstehen.\n- `Movie` (und ebenso `Country`/`Processor`) implementiert das `DataPoint`-Interface nicht, wodurch du die Datensätze nicht als `DataPoint[]` an den `Visualizer` übergeben kannst.\n- In `VisualizerApp` wird weiterhin `new DataPoint[0]` verwendet statt einen geladenen Datensatz (Movies/Countries/Processors) zu visualisieren.\n- Die geforderten Javadoc-Kommentare zur Dokumentation des erwarteten Verhaltens der Interface-Methoden fehlen.\n\n### Suggestion\n- Schau im `Visualizer` nach, welche konkreten Werte er an den Dummy-Stellen braucht: einmal für Min/Max-Berechnung (x/y), einmal fürs Plotten (x/y + Gruppe/Farbe), und einmal fürs Highlighting (Titel + mehrzeiliger Detailtext). Genau diese Infos sollten als **Rückgabewerte** über Methoden im Interface verfügbar sein.\n- Überlege dir beim Interface: Der `Visualizer` soll Daten **abfragen**, nicht Daten **setzen**. D.h. Methoden mit passenden Return-Typen helfen dir mehr als `void title(...)` usw.\n- Implementiere das Interface zuerst für `Movie` und prüfe dann Schritt für Schritt, ob du damit die Dummy-Stellen im `Visualizer` ersetzen kannst. Wenn das klappt, ist die Schnittstelle wahrscheinlich passend.\n- In `VisualizerApp`: Du kannst nicht direkt ein `Movie[]` in ein `DataPoint[]` stecken, solange `Movie` kein `DataPoint` ist. Sobald es das ist, prüfe, welche Art von Array-Zuweisung/Übergabe dann möglich ist.\n- Ergänze pro Interface-Methode eine kurze Javadoc: was bedeutet der Wert (z.B. “x-Achse”), in welcher Einheit/Skalierung, und wie der String für die Hover-Box formatiert sein soll (z.B. Zeilenumbrüche mit `\\n`).\n\n### Code Style\n- Die Namen der Interface-Methoden (`information`, `secondInfo`) sind sehr unspezifisch; sprechendere Namen, die den Zweck im Visualizer ausdrücken (Achse/Gruppe/Titel/Details), machen die Schnittstelle verständlicher.\n- `Map<String, Integer>` als Parameter im Interface wirkt unnötig komplex für die Darstellung; außerdem ist es inkonsistent, weil einige Werte (z.B. Ratings, Literacy) nicht `Integer` sind.\n",
"status" : "SUCCESS"
}
}