{
"llm" : {
"feedback" : "# Exercise: todo\n\n### Correctness\n- Die Klasse `Task` ist nicht implementiert (inkl. Felder wie `id`, `description`, `done` und `toString()`), obwohl sie laut Aufgabe für das Modellieren der To-dos erforderlich ist.\n- In `ToDoApp` fehlt das geforderte Array zum Speichern von `Task`-Objekten (z. B. ein `Task[]` als Feld der Klasse).\n- Die drei vorgegebenen Methoden `listTasks`, `addTask` und `markTaskDone` sind noch nicht implementiert, dadurch funktionieren die Commands `list ...`, `add ...` und `mark done ...` nicht.\n- Das Verhalten bei „keine Tasks vorhanden“ (`\"(No tasks)\"`) ist nicht umgesetzt, weil `listTasks` leer ist.\n- Die geforderte Fehlermeldung beim Markieren einer nicht vorhandenen ID (`\"Task with ID XX not found\"`) ist nicht umgesetzt, weil `markTaskDone` leer ist.\n\n### Suggestion\n- Implementiere zuerst die `Task`-Klasse so, dass ein Task seine ID, Beschreibung und den Erledigt-Status speichern kann; `toString()` sollte so formatiert sein, dass `IO.println(task);` genau die gewünschte Zeile ausgibt.\n- Lege in `ToDoApp` ein `Task[]` als Speicher an und überlege dir zusätzlich, wie du festhältst, wie viele Plätze darin bereits belegt sind bzw. wo der „erste freie Platz“ ist.\n- In `addTask(description)`: Suche den ersten freien Index im Array und benutze genau diesen Index auch als ID für das neue Objekt.\n- In `listTasks(all)`: Iteriere über die gespeicherten Tasks und gib je nach `all` entweder alle oder nur die nicht erledigten aus; merke dir dabei, ob überhaupt etwas ausgegeben wurde, um sonst `\"(No tasks)\"` zu drucken.\n- In `markTaskDone(id)`: Prüfe, ob die ID im gültigen Bereich liegt und ob an diesem Index tatsächlich ein Task gespeichert ist; nur dann den Status auf „done“ setzen, sonst die geforderte Meldung ausgeben.\n\n### Code Style\n- In der Abgabe sind nur TODO-Stubs ohne Implementierung vorhanden; sobald du implementierst, achte darauf, dass `Task` und das Task-Array als klar erkennbare Klassen-/Instanzbestandteile (Felder, Konstruktor, `toString`) strukturiert sind.\n\n\n# Exercise: energymeter\n\n### Correctness\n- Die Klasse ist noch leer: Es fehlen die Attribute `capacity` und `level`, der Konstruktor `EnergyMeter(double)` sowie die Methoden `fill(double)`, `consume(double, double)` und `percentFull()`.\n\n### Suggestion\n- Lege zuerst die zwei Attribute an, damit der Zustand (Kapazität und aktueller Füllstand) überhaupt gespeichert werden kann.\n- Implementiere dann den Konstruktor so, dass er die Kapazität setzt und den Start-Füllstand definiert (achte darauf, was bei ungültiger Kapazität passieren soll).\n- Ergänze `fill` und `consume` so, dass `level` passend verändert wird und innerhalb sinnvoller Grenzen bleibt (nicht über Kapazität, nicht unter 0).\n- Implementiere `percentFull()` so, dass ein Prozentwert zurückkommt und überlege dir, was bei Kapazität `0` passieren soll (Unit-Tests erwarten hier meist ein definiertes Verhalten).\n\n### Code Style\n- Der `// TODO`-Kommentar ist okay als Platzhalter, sollte aber entfernt/ersetzt werden, sobald die Implementierung steht.\n\n\n# Exercise: pong\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n\n\n# Exercise: stepstats\n\n### Correctness\n- Du initialisierst `allSteps` mit `Double.MIN_VALUE`; dadurch wird der Durchschnitt minimal verfälscht (weil du nicht bei 0 startest, sondern mit einem kleinen positiven Wert).\n- In der Aufgabenbeschreibung soll das Attribut `averageSteps` als `averageSteps` verwendet werden können (`stats.averageSteps` wird im Text als `stats.averageSteps`? — im Beispiel heisst es `avgSteps`, aber in der Vorgabe steht `averageSteps`); bei dir passt der Name zwar zum Text, aber nicht zur gezeigten Verwendung (`double avgSteps = stats.averageSteps;` ist ok) – wichtig ist, dass du genau die geforderte Feldbezeichnung verwendest, wie sie in der Aufgabenstellung steht (prüf das nochmals, ob `averageSteps` wirklich gefordert ist oder ob `avgSteps` erwartet wird).\n\n### Suggestion\n- Wenn du eine Summe aufbaust, starte sie bei einem neutralen Element der Addition; überlege dir, welcher Startwert bei einer Summe keinen Einfluss auf das Resultat hat.\n- Schau nochmals genau auf die vorgegebene Nutzung in der Aufgabenstellung und vergleiche Feldnamen: welche Attributnamen werden dort exakt erwartet?\n\n### Code Style\n- Du speicherst `steps` und `goal` als Instanzvariablen, nutzt sie aber nach dem Konstruktor nicht mehr; das kann man weglassen, wenn sie nicht Teil des Objektzustands sein sollen.\n- Du iterierst viermal separat über das Array; das ist unnötig redundant. Lesbarkeit und Effizienz werden besser, wenn du alle Kennzahlen in einem einzigen Durchlauf berechnest.\n- `successDays`, `averageSteps`, `minSteps`, `maxSteps` sind `public`; das passt zwar zur geforderten direkten Attribut-Nutzung, aber normalerweise würde man Felder kapseln (hier nur als Hinweis zu “üblich”, auch wenn die Aufgabe direkten Zugriff verlangt).\n- `Double.MIN_VALUE` ist leicht missverständlich (es ist nicht “sehr negativ”, sondern die kleinste positive Zahl); ein klarerer Startwert macht den Code verständlicher.\n",
"status" : "SUCCESS"
}
}