{
"llm" : {
"feedback" : "# Exercise: address\n\n### Correctness\n- \n\n### Suggestion\n- \n\n### Code Style\n- In den Settern sind die `else`-Blöcke nach einem `throw` nicht nötig; das macht den Code etwas länger als erforderlich.\n\n\n# Exercise: timespan\n\n### Correctness\n- Im Konstruktor ist die Precondition für „Zeitspannen sind nie negativ“ nicht korrekt umgesetzt: Durch die Bedingung mit `||` akzeptierst du Fälle, in denen z.B. `hours < 0` aber `hours*60+minutes >= 0` ist (z.B. `-1h 120min`), obwohl die öffentlich beobachtbare Zeitspanne dann negative Stunden haben kann.\n- In `add` ist die Precondition für „Zeitspannen können nur verlängert werden“ nicht korrekt: Du prüfst nur `hours*60+minutes < 0` für die *Parameter*, aber die Invariante verlangt, dass **der neue `totalMinutes()`-Wert nicht kleiner als der alte** wird. Es gibt Aufrufe mit positiven Parametern, die trotzdem zu einer Verkürzung führen können, wenn du Minuten/ Stunden-Korrekturen mit negativen Minuten zulässt.\n- `add` erlaubt durch die nachträgliche Normalisierung (`while (this.minutes < 0) { ... }`), dass `this.hours` verringert wird. Das verletzt die Anforderung „Zeitspannen können nur verlängert werden, nicht verkürzt“ (vom Client aus beobachtbar über `totalMinutes()` bzw. `getHours()`/`getMinutes()`).\n\n### Suggestion\n- Überlege dir für den Konstruktor eine Precondition, die direkt die geforderte Invariante ausdrückt: Prüfe die **Gesamtminuten** der entstehenden Zeitspanne und verhindere dabei, dass aus Sicht des Clients eine „negative“ Zeitspanne entsteht (nicht nur „irgendwie“ rechnerisch ≥ 0 in einem Teilfall).\n- Für `add`: Vergleiche konzeptionell „old totalMinutes“ mit „new totalMinutes“ (also Zustand vor und nach dem Addieren). Eine Precondition, die nur die Eingabeparameter betrachtet, reicht dafür nicht.\n- Wenn du negative `minutes` beim Addieren erlauben willst, musst du trotzdem garantieren, dass das Ergebnis nicht kleiner wird. Alternativ könntest du die Precondition so wählen, dass negative Werte gar nicht erst zugelassen werden (je nachdem, wie du „sinnvoll“ interpretierst) – wichtig ist, dass die Monotonie (`totalMinutes` wächst oder bleibt gleich) eingehalten wird.\n\n### Code Style\n- Vermeide doppelte/unklare Logik in Bedingungen wie `((minutes >= 0 && hours >= 0) || hours * 60 + minutes >= 0)`: Das ist schwer zu lesen und macht es leicht, versehentlich unerwünschte Fälle zuzulassen.\n- Statt mehrfacher `while`-Schleifen zur Normalisierung könntest du die Umrechnung (Übertrag/Rest) klarer ausdrücken (macht das Verhalten leichter überprüfbar).\n- `IllegalArgumentException()` ohne Nachricht erschwert Debugging und Tests; eine kurze, präzise Message wäre hilfreicher.\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: smarthome\n\n### Correctness\n- In `turnNextRoomBright()` ist die Bedingung in deiner `while`-Schleife in der falschen Reihenfolge: Du greifst auf `rooms[i]` zu, bevor du sicherstellst, dass `i` noch im gültigen Bereich liegt. Das kann bei bestimmten Haus-Konfigurationen (z.B. wenn alle Räume bereits “full bright” sind oder bei sehr kleinen Arrays) zu einem `ArrayIndexOutOfBoundsException` führen.\n\n### Suggestion\n- Prüfe in der `while`-Bedingung zuerst den Indexbereich (`i < ...`) und erst danach den Zugriff auf `rooms[i]`. In Java wird `&&` von links nach rechts ausgewertet, d.h. du kannst die Reihenfolge so nutzen, dass der Arrayzugriff nur passiert, wenn der Index gültig ist.\n\n### Code Style\n- `fullBright(Room room)` und `findEfficient(Room room)` sind gute Hilfsmethoden; für Lesbarkeit könntest du sie (wie `findEfficient`) auch `private` machen, da sie nur intern verwendet werden.\n- In `findBedrooms()` ist das wiederholte Vergrössern des Arrays per `System.arraycopy` zwar funktional, aber recht schwergewichtig/verbose. Für diese Aufgabe wäre auch eine Lösung möglich, die ein Array in Maximalgrösse (`rooms.length`) anlegt und dann nur einen Index mitzählt (wie in der Aufgabenbeschreibung erlaubt).\n\n\n# Exercise: bosses\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n",
"status" : "SUCCESS"
}
}