{
"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 weder vorne noch links noch rechts ein Pfad ist: laut Aufgabenstellung muss die Figur dann „rechtsum kehrt machen“ (180° drehen). Ohne das kann der Algorithmus in Sackgassen hängen bleiben und die ersten vier Levels nicht zuverlässig schaffen.\n- In `BacktrackingAlgorithm` ist das `besucht`-Array falsch dimensioniert: du verwendest `new boolean[col][row]`, aber `col`/`row` sind Startkoordinaten, nicht Labyrinth-Grösse. Sobald sich die Figur bewegt, sind `besucht[col][row]` sehr wahrscheinlich ausserhalb des Arrays.\n- In `BacktrackingAlgorithm` bewegst du dich bei `pathToTheLeft()` und `pathToTheRight()` jeweils mit `moveForward()`, ohne vorher in die entsprechende Richtung zu drehen. `pathToTheLeft()`/`pathToTheRight()` prüfen relativ zur aktuellen Blickrichtung; wenn du dann geradeaus läufst, läufst du nicht in den geprüften Pfad.\n- In `BacktrackingAlgorithm` fehlt das eigentliche Backtracking: Wenn ein Pfad ausprobiert wurde und nicht zum Ziel führt, musst du wieder zurück zur Verzweigung (inkl. korrekter Drehungen/Schritte), sonst bleibst du in einer Sackgasse stecken oder läufst in bereits besuchte Zustände.\n- In `BacktrackingAlgorithm` ist dein „Umdrehen“-Teil (`if(!figure.pathAhead()) { turnRight(); turnRight(); ... }`) nicht an die Situation „keine Wege verfügbar“ gekoppelt, sondern nur an „nicht vorne“. Dadurch drehst du ggf. auch dann um, wenn links oder rechts ein gangbarer Weg existiert.\n\n### Suggestion\n- Für `TryStraightFirst`: Ergänze am Ende der If-Kette einen `else`, der genau zwei Rechtsdrehungen macht, damit du aus Sackgassen wieder herauskommst.\n- Für `BacktrackingAlgorithm`: Überlege dir, woher du die Labyrinth-Dimensionen bekommst. Über `Figure` kannst du sie nicht direkt abfragen; ein reines `boolean[][] besucht` nach Koordinaten ist daher schwierig. Alternativ kannst du den Zustand anders kodieren (z.B. Position+Richtung als „besucht“) oder eine Datenstruktur verwenden, die keine festen Grenzen braucht.\n- Für links/rechts in `BacktrackingAlgorithm`: Wenn du entscheidest „ich gehe links“, musst du vorher auch wirklich nach links drehen (und analog rechts). Danach kannst du `moveForward()` ausführen.\n- Für echtes Backtracking: Denke in „Schritte merken“. Typisch ist, beim Vorwärtsgehen die Gegenbewegung/Entscheidung zu speichern (z.B. Stack), und wenn du in eine Sackgasse/komplett besuchte Umgebung kommst, gehst du einen Schritt zurück und probierst die nächste Alternative.\n- Für das Umdrehen: Prüfe nicht nur `!pathAhead()`, sondern die Kombination „kein Weg vorne, kein Weg links, kein Weg rechts“ bevor du 180° drehst.\n\n### Code Style\n- In `BacktrackingAlgorithm.navigate` sind auskommentierte Codeblöcke und alte Debug-Ideen drin (`System.out.println`, auskommentierte while/recursive calls); das macht es schwerer zu lesen – besser entfernen, sobald du dich für einen Ansatz entschieden hast.\n- Methodennamen/Variablen mischen Deutsch und Englisch (`besucht`, `checkPath`, `navigate`); einheitliche Sprache verbessert die Lesbarkeit.\n- `checkPath` ist rekursiv und enthält mehrere unabhängige `if`-Blöcke; ohne klare `else if`-Struktur ist der Kontrollfluss schwer nachzuvollziehen. Eine klarere Struktur (z.B. „wähle genau eine Richtung pro Schritt“) würde die Verständlichkeit stark erhöhen.\n\n\n# Exercise: swissmap\n\n### Correctness\n- In `ModeButton` ist der interaktive Bereich (`getInteractiveArea`) viel kleiner als der gezeichnete Button (`drawRect` 65x25). Dadurch reagieren Klick/Hover nur in einem kleinen Teil des Buttons und nicht „auf dem Knopf“, wie gefordert.\n- Bei `Lake` und `Mountain` verwendest du für die Bild-Skalierung `WIDTH * scale(gui) / BG_PIXEL_WIDTH` (also die Kartenbreite als Referenz). Damit werden die Icons extrem gross skaliert (abhängig von Fenstergrösse) und nicht wie „Objekte“ auf der Karte dargestellt.\n- In `City.getInteractiveArea` (5x5) und auch bei `Lake`/`Mountain` (10x10 bzw. 15x15) ist der interaktive Bereich sehr klein im Verhältnis zu dem, was du beim Hover zusätzlich zeichnest (Text/Highlight). Das kann dazu führen, dass Hover sofort wieder weg ist, wenn man minimal daneben liegt, und die Beschreibung praktisch nicht zuverlässig angezeigt werden kann.\n\n### Suggestion\n- Leite die Breite/Höhe des `Rectangle` im `ModeButton` aus den tatsächlich gezeichneten Button-Massen ab, sodass interaktive Fläche und Darstellung deckungsgleich sind.\n- Überlege dir für `Lake`/`Mountain`, ob die Icon-Grösse wirklich an die Karten-Gesamtbreite gekoppelt sein sollte. Eher sinnvoll ist eine feste Pixelgrösse oder eine Skalierung, die sich direkt an einem gewünschten Icon-Mass orientiert (und ggf. nur leicht mit `scale(gui)` mitskaliert).\n- Mach die Hover-Flächen so gross, dass man das Objekt gut „treffen“ kann. Orientiere dich dabei an der tatsächlichen sichtbaren Markierung (Icon/Marker), nicht an sehr kleinen 5x5- oder 10x10-Rechtecken.\n\n### Code Style\n- Entferne Debug-Ausgaben wie `System.out.println(satelliteMode)` in `SwissMap.draw` und `System.out.println(getInhabitants())` in `City.onMouseEnter`, sonst spammt das beim Rendern/Hovern die Konsole.\n- In `Mountain` (und auch `SwissMap`) hast du Imports für `ImageIO`, `BufferedImage`, `IOException`, `Objects`, die nirgends verwendet werden.\n- `ModeButton` speichert `hovered` und `clicked`, nutzt sie aber nicht für Darstellung/Logik (aktuell tote Felder).\n\n\n# Exercise: visualizer\n\n### Correctness\n- Das `DataPoint`-Interface ist noch leer, obwohl die Aufgabe verlangt, dass du die benötigten Methoden definierst (inkl. Javadoc), damit `Visualizer` mit den Datensätzen arbeiten kann.\n- In `Visualizer` werden die DUMMY-Werte (`DUMMY_DOUBLE`, `DUMMY_STRING`) noch überall verwendet; sie müssten durch Aufrufe auf das jeweilige `DataPoint`-Objekt ersetzt werden, sonst werden keine echten Daten geplottet/verglichen/angezeigt.\n- `Movie`, `Country` und `Processor` implementieren das `DataPoint`-Interface noch nicht; damit können die Arrays aus `loadMovies/loadCountries/loadProcessors` nicht als `DataPoint[]` an den `Visualizer` übergeben werden, wie gefordert.\n- In `VisualizerApp.main()` wird weiterhin `new DataPoint[0]` verwendet statt einen der Loader (`loadMovies()`, `loadCountries()`, `loadProcessors()`), daher wird gar nichts visualisiert.\n\n### Suggestion\n- Schau im `Visualizer` nach, welche Infos er pro Punkt braucht: überall wo aktuell `DUMMY_DOUBLE` steht, braucht er einen Zahlenwert aus dem Punkt (z.B. x/y-Koordinaten); wo `DUMMY_STRING` steht, braucht er Text aus dem Punkt (z.B. Gruppierung/Farbe, Titel und Detailtext für Hover).\n- Entwirf dein `DataPoint`-Interface so, dass genau diese Stellen im `Visualizer` ohne Sonderfälle funktionieren: „x-Wert“, „y-Wert“, „Gruppenname“ (kann evtl. auch `null` sein) sowie „Titel“ und „Detailbeschreibung“ für die Hervorhebung.\n- Sobald das Interface steht: ersetze im `Visualizer` schrittweise alle DUMMY-Verwendungen durch `point.…` bzw. bei `closest` durch `closest.…` (insbesondere bei Distanzberechnung, Plotten, Legendengruppen und Hover-Text).\n- Implementiere danach `DataPoint` in `Movie` zuerst (wie in der Aufgabenbeschreibung: x=Budget, y=User-Rating; Gruppe/Details gemäss Screenshot), und teste, indem du in `VisualizerApp` den Movie-Datensatz wirklich übergibst.\n- Für `Country` und `Processor`: überlege jeweils, welche Felder auf x/y gehören (steht in der Aufgabe), und wie du Gruppe/Titel/Details aufbereitest (Region/Hersteller etc. bieten sich an).\n\n### Code Style\n- In deinem aktuellen Stand sind sehr viele `TODO`/Dummy-Platzhalter übrig; sobald du implementierst, entferne die nicht mehr benötigten Konstanten `DUMMY_DOUBLE`/`DUMMY_STRING`, damit klar ist, dass alles über die Schnittstelle läuft.\n- Achte darauf, dass `VisualizerApp.main()` in Java normalerweise `public static void main(String[] args)` ist (falls das im Framework nicht speziell gehandhabt wird); sonst startet das Programm je nach Setup nicht.\n",
"status" : "SUCCESS"
}
}