{
"llm" : {
"feedback" : "# Exercise: address\n\n### Correctness\n- \n\n### Suggestion\n- \n\n### Code Style\n- Im Konstruktor setzt du zuerst die Felder und prüfst erst danach die Invarianten. Das ist zwar funktional, aber unsauber, weil das Objekt kurzzeitig in einem ungültigen Zustand ist (auch wenn direkt danach eine Exception kommt). Besser ist es, erst zu validieren und dann zuzuweisen (oder die Setter zur Wiederverwendung der Validierung zu nutzen).\n- Du hast die gleiche Validierungslogik mehrfach (Konstruktor und Setter). Das führt leicht zu Inkonsistenzen bei späteren Änderungen. Überlege, wie du die Checks an einer Stelle bündeln kannst (z.B. durch Wiederverwendung bestehender Methoden oder kleine private Prüfmethoden).\n- Kleine Formatierung/Lesbarkeit: `private int zipCode;` hat einen doppelten Abstand, und in der Parameterliste fehlen teils Leerzeichen nach Kommas (`int number,int zipCode`).\n\n\n# Exercise: timespan\n\n### Correctness\n- In `add(int hours, int minutes)` ist die Precondition für „Zeitspanne darf nicht verkürzt werden“ unvollständig: Wenn `hours`/`minutes` negativ sind, kann die Summe trotzdem gleich bleiben (z.B. `+1h` und `-60min`) und deine Prüfung lässt das durch, obwohl damit ein Verkürzen „zwischendurch“ möglich ist und du keine sinnvollen Preconditions für die Parameter selbst erzwingst.\n- Im Konstruktor erlaubst du Fälle, in denen `minutes` negativ ist, solange `hours*60 + minutes >= 0` (z.B. `hours=1, minutes=-30`). Das verletzt die Idee „sinnvolle Preconditions für den Konstruktor“ (Client soll keine negativen Eingaben für Bestandteile einer Zeitspanne geben können), auch wenn `totalMinutes` am Ende nicht negativ ist.\n\n### Suggestion\n- Überlege im `add(...)`, welche Parameterwerte du grundsätzlich ausschliessen willst, unabhängig davon, ob die Gesamtsumme zufällig nicht kleiner wird (Tipp: betrachte `hours` und `minutes` als Eingabe-Dauerbestandteile, nicht nur als „Delta in totalMinutes“).\n- Definiere im Konstruktor Preconditions so, dass die Eingabe bereits eine gültige Zeitspanne beschreibt (Tipp: nicht nur auf die Summe schauen, sondern darauf, was für Eingaben du Client-Code erlauben möchtest).\n\n### Code Style\n- In `getHours()` und `getMinutes()` rufst du jeweils `totalMinutes()` erneut auf; das ist zwar korrekt, aber redundant und kann verwirren, weil du gleichzeitig auch `hours`/`minutes` als Felder führst. Entscheide dich klar für eine Repräsentation (entweder Felder schon normalisiert verwenden oder alles aus `totalMinutes` ableiten).\n- `IllegalArgumentException()` ohne Nachricht macht Fehlersuche für Nutzer der Klasse unnötig schwer; gib eine kurze, hilfreiche Message an, welche Precondition verletzt wurde.\n\n\n# Exercise: asteroids\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n\n\n# Exercise: bosses\n\n### Correctness\n- \n\n### Suggestion\n- \n\n### Code Style\n- In `isSuperiorOf`, the `}current = current.getBoss();` on the same line as the closing brace hurts readability; put the `current = ...` on its own line and format the braces consistently.\n- You still have `// TODO` comments in both methods although they’re implemented; remove them once done.\n- Consider adding a blank line between the `if` block and the update step in the `while` loop to make the loop structure clearer.\n\n\n# Exercise: smarthome\n\n### Correctness\n- In `randomize()` verwendest du `random.nextDouble(0.5, 1.0)`: Diese Überladung existiert nicht in allen Java-Versionen (in vielen Umgebungen von Prog1 ist nur `nextDouble()` ohne Parameter verfügbar). Falls eure Laufzeitumgebung das nicht kennt, kompiliert die Lösung nicht und erfüllt damit die Aufgabe nicht lauffähig.\n- In `findHallway()` gibst du `null` zurück, obwohl laut Aufgabenstellung davon ausgegangen wird, dass genau eine Hallway existiert (und du sie zurückgeben sollst). Damit brichst du die Annahme und riskierst im Zusammenspiel mit `nightMode()` ein Fehlverhalten (z.B. `NullPointerException`).\n- In `nightMode()` schaltest du in der Hallway und in jedem Bedroom immer die Lampe an Index `0` ein. Das ist zwar “beliebig” im Sinne der Aufgabe, aber nur dann korrekt, wenn jeder dieser Räume garantiert mindestens eine Lampe hat. Diese Garantie steht so nicht in der Aufgabenbeschreibung.\n\n### Suggestion\n- Schau dir an, wie du den Zufallswert für die Helligkeit auch ohne die zweiparametrige `nextDouble(a,b)`-Methode berechnen kannst (Stichworte: Skalieren und Verschieben eines Werts aus `[0,1)` in den Bereich `[0.5, 1.0)`).\n- Bei `findHallway()`: Wenn “genau eine existiert” angenommen wird, kannst du deine Logik so strukturieren, dass du am Ende keinen `null`-Fallback brauchst (oder zumindest sicherstellst, dass der Rückgabewert immer ein `Room` ist, wenn die Annahme gilt).\n- Für `nightMode()`: Überlege, wie du “eine beliebige Lampe” auswählen kannst, ohne fest vorauszusetzen, dass `getLamps()[0]` existiert (z.B. erst prüfen, ob das Lampen-Array leer ist, oder die Auswahl abhängig von der tatsächlichen Länge machen).\n\n### Code Style\n- Du hast eine auskommentierte, unfertige Hilfsmethode (`isRoomFindetStromgering`) im Code gelassen; solche Reste besser entfernen, damit der Code klar bleibt.\n- Benennung/Lesbarkeit: Variablennamen wie `zufaulligerraum` (Tippfehler) und gemischte Sprache in Kommentaren/Bezeichnern machen es schwerer zu lesen; wähle konsistent eine Sprache und korrekt geschriebene, sprechende Namen.\n- `private Random random = new Random();` könnte `final` sein, da du ihn nicht neu zuweist (`private final Random random = ...`), das signalisiert Intent klarer.\n- In `isRoomFullyBright` ist der Parametername `Lamp[] room` irreführend (es ist nicht der Raum, sondern dessen Lampen); ein Name wie `lamps` wäre verständlicher.\n",
"status" : "SUCCESS"
}
}