{
"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 geradeaus noch links noch rechts geht, dann rechtsum kehrt machen“; aktuell passiert dann gar nichts und die Schleife kann hängen bleiben.\n- In `TryStraightFirst` drehst du bei `pathToTheLeft()`/`pathToTheRight()` nur, machst aber keinen Schritt nach vorne im selben Schleifendurchlauf; die Aufgabenbeschreibung verlangt aber, dass links/rechts „versucht“ wird (also drehen **und** gehen), wenn geradeaus nicht geht.\n- In `BacktrackingAlgorithm` ist dein `besucht`-Array fest auf `100x100x100` dimensioniert; wenn ein Labyrinth grösser ist, kann das zu falschem Verhalten/Absturz führen (und die dritte Dimension ist für `dir` viel grösser als nötig).\n- In `BacktrackingAlgorithm` machst du im `else`-Zweig (zu `if(figure.pathToTheRight())`) eine 180°-Drehung und rufst direkt wieder `checkPath` auf, ohne `moveForward()`; dadurch ändert sich Position nicht und du landest sehr schnell in Zuständen, in denen du nur noch drehst/returnst statt korrekt zurückzulaufen.\n- In `BacktrackingAlgorithm` hängt das `else` nur am `if(pathToTheRight())`, nicht am ganzen Block „Ahead/Left/Right“; dadurch wird die „Kehrtwende“-Logik auch dann ausgeführt, wenn es z.B. vorne oder links einen Pfad gab, aber rechts nicht. Das verändert den Suchablauf unerwartet und kann korrekte Wege verhindern.\n- In `BacktrackingAlgorithm` ist das Zurückgehen nach einem rekursiven Schritt nicht in allen Fällen konsistent zur gemachten Bewegung (z.B. rechts: du gehst nach rechts vorwärts, aber beim Backtrack drehst du zweimal nach links, gehst vor, drehst zweimal nach links – das ist leicht fehleranfällig, wenn die Orientierung nicht genau zur ursprünglichen zurückgeführt wird).\n\n### Suggestion\n- Für `TryStraightFirst`: Überlege dir eine klare `if / else if / else if / else`-Kette, bei der **genau eine** Aktion pro Loop passiert, und im letzten `else` wirklich die „Kehrtwende“ (zwei Rechtsdrehungen oder zwei Linksdrehungen) ausgeführt wird.\n- Für `TryStraightFirst`: Wenn du dich für links oder rechts entscheidest, führe danach auch wirklich den Schritt aus (du kannst dir merken: „erst ausrichten, dann gehen“).\n- Für `BacktrackingAlgorithm`: Dimensioniere `besucht` anhand von `row/col` aus dem aktuellen Labyrinth (oder verwende eine dynamische Struktur wie `Set`), und für die Richtung reicht typischerweise `4` Zustände.\n- Für `BacktrackingAlgorithm`: Beim Backtracking hilft es, eine Bewegung als Paar zu sehen: **hin** (drehen+vorwärts) und danach, falls nicht gefunden, **exakt inverse Bewegung**, sodass du garantiert wieder im gleichen Zustand (row/col/dir) landest wie vorher.\n- Für `BacktrackingAlgorithm`: Achte darauf, dass die „kein Weg von hier“-Behandlung erst dann greift, wenn *keine* der Optionen (ahead/left/right) möglich bzw. erfolgreich war; strukturiere die Verzweigungen so, dass das `else` wirklich zu „keine Option“ gehört.\n- Für `BacktrackingAlgorithm`: Wenn du an einer Sackgasse umdrehst, musst du typischerweise auch wirklich einen Schritt zurück machen (nicht nur drehen), sonst erkundest du keinen neuen Zustand.\n\n### Code Style\n- Entferne `System.out.println(figure.isGoalReached());` (Debug-Ausgabe) aus dem Algorithmus, sonst spammst du die Konsole und beeinflusst evtl. Timing/Lesbarkeit.\n- Einrückungen/Whitespace sind teils inkonsistent (z.B. fehlende Einrückung im Klassenrumpf, leere Zeilen, Klammern); ein einheitliches Format macht die Backtracking-Logik deutlich leichter zu prüfen.\n- Viele auskommentierte Codezeilen (`//checkPath...`, große Kommentarblöcke) lenken ab; besser löschen oder gezielt als kurze Erklärung ersetzen.\n- `found` als Klassenfeld ist unnötig global; stilistisch sauberer ist es, den Erfolg über Rückgabewerte der rekursiven Methode zu steuern (macht die Logik nachvollziehbarer).\n\n\n# Exercise: swissmap\n\n### Correctness\n- Dein `ModeButton` reagiert nur in einem sehr kleinen Bereich auf Hover/Klick: Du zeichnest ihn mit `65x25`, aber `getInteractiveArea(...)` liefert nur `15x15`. Dadurch kann man den Knopf oft nicht (oder nur teilweise) anklicken/hovern.\n- In `Lake` und `Mountain` ist die Bild-Skalierung/Grösse an die Hintergrund-Karte gekoppelt (`WIDTH * scale(gui) / BG_PIXEL_WIDTH)`), dadurch werden die Icons riesig bzw. skalieren “wie die ganze Schweizkarte” statt wie ein Icon an einem Punkt.\n- Bei `City` passt die Interaktionsfläche nicht wirklich zur gezeichneten Form: Du zeichnest einen Kreis, aber `getInteractiveArea(...)` ist ein `Rectangle` mit `5x5` ab dem Mittelpunkt – das deckt den Kreis praktisch nicht ab.\n\n### Suggestion\n- Schau bei `ModeButton` darauf, dass die `Shape`-Fläche dieselbe Position und dieselben Abmessungen hat wie das, was du in `draw(...)` zeichnest (gleicher Ursprung, gleiche Breite/Höhe).\n- Für `Lake`/`Mountain`: Überlege dir eine feste Icon-Grösse in Pixeln (evtl. leicht mitskalieren, aber nicht mit der Kartenbreite). Orientiere dich daran, wie `drawImage(...)` üblicherweise für kleine Marker verwendet wird (z. B. Breite/Höhe unabhängig von `SwissMap.WIDTH`).\n- Für `City`: Wenn du beim Punkt/Kreis bleiben willst, wähle die `Rectangle`-Interaktionsfläche so, dass sie den Kreis wirklich umschliesst (z. B. Mittelpunkt minus Radius als x/y, Breite/Höhe = 2*Radius).\n\n3. Code Style:\n- In `ModeButton` sind die Attribute `hovered` und `clicked` aktuell ohne Effekt (sie werden gesetzt, aber nicht fürs Zeichnen/Logik verwendet) – entweder nutzen oder entfernen.\n- In `SwissMap.draw(...)` und `City.onMouseEnter()` sind `System.out.println(...)` Debug-Ausgaben; die würde man für die Abgabe typischerweise entfernen.\n- In `Mountain` und `SwissMap` hast du Imports für `ImageIO`, `BufferedImage`, `IOException`, `Objects`, die du nicht verwendest – diese Imports kannst du aufräumen.\n\n\n# Exercise: visualizer\n\n### Correctness\n- Das `DataPoint`-Interface stellt nicht die Informationen bereit, die der `Visualizer` effektiv braucht (x-Wert, y-Wert, Gruppierung/Farbe, Titel und Detailtext für Hover). Stattdessen definierst du Methoden mit `void`, die eher wie “Setter” wirken.\n- In `Visualizer` wurden die Dummy-Werte (`DUMMY_DOUBLE`, `DUMMY_STRING`) nirgends durch Aufrufe auf das jeweilige `DataPoint`-Objekt ersetzt, dadurch kann die Visualisierung nicht wie gefordert funktionieren (Min/Max, Plot, Hover, Gruppen/Legende bleiben Dummy).\n- `Movie` (und ebenso `Country`/`Processor`) implementiert `DataPoint` nicht, damit sind die Datensätze nicht kompatibel mit dem `Visualizer`, wie es die Aufgabe verlangt.\n- In `VisualizerApp` wird weiterhin `new DataPoint[0]` verwendet und nicht einer der geladenen Datensätze (Movies/Countries/Processors) an den `Visualizer` übergeben.\n\n### Suggestion\n- Schau im `Visualizer` an, welche konkreten Infos pro Punkt gebraucht werden: überall, wo aktuell `DUMMY_DOUBLE` steht, muss ein Zahlenwert vom `point` kommen (für x/y); überall wo `DUMMY_STRING` steht, muss ein String vom `point` kommen (Gruppenname, Titel, Detailtext).\n- Überlege dir die Richtung der Methoden im Interface: Der `Visualizer` fragt Daten ab → Interface-Methoden sollten daher Werte **zurückgeben** (z.B. `double`/`String`) statt `void`-Methoden, die Parameter entgegennehmen.\n- Für die Implementationen: `Movie` muss die geforderten Achsen liefern (Budget als x, Rating als y) und zusätzlich das, was du für Legende (Gruppe) und Hover-Anzeige brauchst.\n- Wenn du in `VisualizerApp` `loadMovies()` verwendest: du brauchst einen Datentyp, der als `DataPoint[]` übergeben werden kann. Prüfe, wie du die geladenen Objekte so an `Visualizer` übergibst, dass der Array-Typ passt.\n\n### Code Style\n- Methodennamen im Interface wie `title(String name)` sind missverständlich (klingen wie Setter). Benenne Methoden so, dass klar ist, ob sie Daten liefern oder setzen.\n- `Map<String, Integer>` für “information” ist für die geforderte Hover-Anzeige eher unpassend/unnötig komplex und schränkt dich zudem auf `Integer`-Werte ein (Ratings, Literacy etc. sind `double`).\n",
"status" : "SUCCESS"
}
}