{
"llm" : {
"feedback" : "# Exercise: address\n\n### Correctness\n- Deine Klasse `Address` enthält noch keine Attribute (`street`, `number`, `zipCode`, `city`), obwohl sie gefordert sind.\n- Es fehlt der Konstruktor mit Parametern für alle vier Informationen.\n- Es fehlt die `format()`-Methode, die die Adresse mit Zeilenumbruch formatiert zurückgibt.\n- Es fehlen Getter und Setter.\n- Die Invarianten werden nirgends geprüft (Strings nicht `null`/nicht leer, `number` positiv, `zipCode` positiv und vierstellig).\n- Es wird bei ungültigen Argumenten keine `IllegalArgumentException` geworfen (weder im Konstruktor noch in Settern).\n\n### Suggestion\n- Lege zuerst die vier Felder mit den passenden Typen an und überlege dir, welche Sichtbarkeit sie haben sollten, damit die Kapselung eingehalten wird.\n- Implementiere danach den Konstruktor so, dass er die Werte nicht “blind” übernimmt, sondern dieselben Prüfungen macht, die später auch die Setter machen sollen.\n- Überlege dir für `zipCode`, wie du “vierstellig” als Bedingung ausdrücken kannst (z.B. über einen Wertebereich) und prüfe zusätzlich, dass es positiv ist.\n- Die `format()`-Methode sollte exakt zwei Zeilen erzeugen: in Zeile 1 Straße + Hausnummer, in Zeile 2 PLZ + Ort; achte darauf, wirklich einen Zeilenumbruch zwischen den Zeilen zu erzeugen.\n- Baue die Validierung so, dass bei einem ungültigen Wert sofort eine `IllegalArgumentException` ausgelöst wird, statt den internen Zustand zu verändern.\n\n### Code Style\n- In der Abgabe steht noch nur `// TODO`; entferne Platzhalter-Kommentare, sobald du die geforderten Bestandteile implementiert hast.\n\n\n# Exercise: timespan\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n\n\n# Exercise: asteroids\n\n### Correctness\n- Teil (a) fehlt: Der Falcon kann sich weiterhin unbegrenzt aus dem Spielfeld bewegen; es wurden keine Spielfeldgrenzen/zusätzlichen Attribute und keine Invariante umgesetzt, die `x`/`y` einschränkt.\n- Teil (b) fehlt: Die Klasse `Asteroid` (mit `x,y,vx,vy`, `typ`, `grösse`, Konstruktor, `move`, `draw`) wurde nicht erstellt und in `AsteroidsGame` auch nicht zum Testen verwendet.\n- Teil (c) fehlt: Es werden keine Asteroiden periodisch erzeugt, verwaltet (z.B. Array mit 20 Plätzen), bewegt/gezeichnet oder beim Verlassen unten entfernt.\n- Teil (d) fehlt: Es gibt keine Kollisionserkennung zwischen Falcon und Asteroiden und keinen Game-Over-Abbruch inkl. Zeichnen des Game-Over-Bildes.\n\n### Suggestion\n- Überlege dir, wo du die Spielfeldbreite/-höhe (oder min/max für x/y) im `Falcon` speichern willst, damit `move()` die Position nach dem Aktualisieren wieder in den erlaubten Bereich “zurückholt” und die Invariante immer gilt.\n- Orientiere dich beim `Asteroid` an der Struktur vom `Falcon`: gleiche Grundattribute für Position/Velocity, aber zusätzlich `type` und `size` sowie ein `draw`, das abhängig vom Typ den richtigen Dateinamen wählt und die Skalierung übergibt.\n- Für das “Spawning” hilft ein fester Container (z.B. Array) plus ein Zähler/Timer: in gewissen Schritten ein neues Objekt in einen freien Slot legen; in jedem Frame alle vorhandenen Asteroiden bewegen/zeichnen und solche entfernen, deren `y` unterhalb der Spielfeldhöhe liegt.\n- Für Kollision: Implementiere eine Methode, die Distanz über `dx, dy` und `sqrt(dx*dx + dy*dy)` berechnet und mit der Summe der Radien vergleicht; rufe diese Prüfung in der Hauptschleife für alle Asteroiden auf und beende dann die Schleife, bevor du den Game-Over-Screen zeichnest.\n\n### Code Style\n- In `AsteroidsGame` heißt die Methode `main()` aktuell nicht `public static void main(String[] args)`; auch wenn das im bereitgestellten Startcode so war, ist es für ein eigenständig startbares Programm üblicherweise nötig (sonst kann es je nach Umgebung nicht direkt gestartet werden).\n\n\n# Exercise: bosses\n\n### Correctness\n- `isSuperiorOf(Employee other)` ist nicht implementiert und liefert immer `false`, dadurch sind z.B. `sara.isSuperiorOf(sara)` (müsste `true` sein) und alle echten Vorgesetzten-Beziehungen falsch.\n- `findCommonSuperiorWith(Employee other)` ist nicht implementiert und liefert immer `null`, dadurch werden gemeinsame Vorgesetzte nie gefunden, auch in Fällen wo zwingend ein Ergebnis erwartet ist (z.B. `sara.findCommonSuperiorWith(sara)`).\n\n### Suggestion\n- Für `isSuperiorOf`: Starte die Suche bei `other` und gehe schrittweise über `getBoss()` nach oben, bis du entweder bei `this` ankommst (dann `true`) oder `null` erreichst (dann `false`). Denk daran, dass „jede Person sich selbst vorgesetzt ist“ → der Selbstfall muss automatisch `true` ergeben.\n- Für `findCommonSuperiorWith`: Überlege dir eine sequentielle Suche, bei der du Kandidaten entlang der Chef-Kette einer Person durchgehst und jeweils prüfst, ob dieser Kandidat auch Vorgesetzter der anderen Person ist (unter Nutzung deiner `isSuperiorOf`-Logik). Wenn du bis `null` hochläufst ohne Treffer, soll `null` zurückkommen.\n\n### Code Style\n- Die `// TODO`-Kommentare sind noch vorhanden; sobald du implementiert hast, sollten sie entfernt werden.\n\n\n# Exercise: smarthome\n\n### Correctness\n- In `turnNextRoomBright()` verwendest du ein `return`, obwohl in der Aufgabenstellung ausdrücklich verlangt wird, ohne *early return* zu arbeiten.\n- In `saveEnergy()` verwendest du `continue`, obwohl die Aufgabenstellung ausdrücklich verlangt, ohne `continue` zu arbeiten.\n- In `randomize()` nutzt du `random.nextDouble(0.5 , 1.0)`: diese Überladung gibt es nicht in allen Java-Versionen (in vielen Umgebungen für solche Übungen ist nur `nextDouble()` ohne Parameter vorhanden). Damit kann der Code je nach Setup nicht kompilieren.\n\n### Suggestion\n- Für `turnNextRoomBright()`: Überlege dir, wie du den “ersten passenden Raum” markieren kannst (z.B. mit einer Variable/Flag), und danach den Rest der Räume nur noch “durchlaufen” kannst, ohne die Methode sofort zu verlassen.\n- Für `saveEnergy()`: Statt `continue` kannst du die Fallunterscheidung so strukturieren, dass du den “normalen Ablauf” nur dann ausführst, wenn eine Lampe gefunden wurde (z.B. über eine `if`-Blockstruktur), und ansonsten einfach nichts tust.\n- Für `randomize()`: Wenn du keine `nextDouble(min,max)`-Methode zur Verfügung hast, kannst du den Zufallswert aus `nextDouble()` (0.0 bis 1.0) geeignet in den Bereich 0.5 bis 1.0 umrechnen.\n\n### Code Style\n- `import java.util.*;` ist sehr breit; besser nur die Klassen importieren, die du wirklich brauchst (`Random`, `Map`, `HashMap`).\n- `lampDictionary` und `getLampByName()` werden in den geforderten Methoden nirgends verwendet; das ist für diese Aufgabe eher unnötiger Ballast.\n- Du hast größere auskommentierte Code-Blöcke (z.B. in `randomize()` und bei `isRoomTurnedOn()`); besser entfernen, sobald du dich für eine Variante entschieden hast.\n- Variablennamen: `RandomBrightness` sollte in Java-Konvention camelCase sein (z.B. `randomBrightness`).\n",
"status" : "SUCCESS"
}
}