{
"llm" : {
"feedback" : "# Exercise: todo\n\n### Correctness\n- In `listTasks(true)` wird bei leerer Liste **nicht** `\"(No tasks)\"` ausgegeben, obwohl das in der Aufgabenbeschreibung gefordert ist.\n- `markTaskDone(int id)` gibt **keine** Meldung `\"Task with ID XX not found\"` aus, wenn die ID nicht existiert, obwohl das explizit verlangt ist (stattdessen kommt es dann zu einem Fehler beim Zugriff).\n- Die Aufgabe verlangt in `ToDoApp` ausdrücklich ein **Array** für `Task`-Objekte; du verwendest stattdessen eine `ArrayList<Task>`.\n- `addTask` soll den Task am “ersten freien Platz” im Array einfügen (ID = Index dieses freien Platzes). Mit `tasks.size()` als ID und immer “hinten anhängen” erfüllst du dieses “erster freier Platz”-Prinzip nicht (relevant, sobald Lücken entstehen könnten).\n\n### Suggestion\n- Überlege in `listTasks(...)`, wie du unabhängig von `all` erkennen kannst, ob **mindestens ein Task** ausgegeben wurde, und nur sonst `\"(No tasks)\"` drucken.\n- In `markTaskDone(...)`: prüfe zuerst, ob die ID überhaupt in deinem Speicherbereich liegt (bei Array wäre das Index-Bereich; bei Liste entsprechend). Wenn nicht, drucke die geforderte Meldung statt auf das Element zuzugreifen.\n- Wenn du die Anforderungen exakt erfüllen willst: ersetze die `ArrayList` durch ein `Task[]` und verwalte selbst, welche Plätze belegt sind. Dann kannst du auch “erster freier Platz” sauber umsetzen, indem du nach `null` suchst.\n- Falls du beim “erster freier Platz”-Prinzip bleiben willst: denke darüber nach, wie du beim Hinzufügen nicht einfach `size()` nimmst, sondern den nächsten verfügbaren Index ermittelst.\n\n### Code Style\n- `toString()` sollte mit `@Override` annotiert werden (hilft, Tippfehler zu vermeiden und macht die Absicht klar).\n- In `addTask` verwendest du `addLast(...)`; das ist bei `ArrayList` nicht üblich/verfügbar (je nach Java-Version/Typ führt das zu einem Compile-Fehler). Nutze die passende Listen-Methode für “am Ende einfügen”.\n- In `listTasks` ist `counter` nur im `else`-Zweig relevant; du könntest die Variable enger scoped halten (direkt dort deklarieren, wo sie gebraucht wird).\n\n\n# Exercise: energymeter\n\n### Correctness\n- Der Konstruktor initialisiert `level` nicht explizit auf `0` (auch wenn Java das standardmässig tut, verlangen die Tests/Anforderung oft eine klare Initialisierung des Startzustands).\n- `percentFull()` berechnet den Prozentwert falsch bzw. kann bei `level == 0` zu einer Division durch 0 führen (dann kommt `NaN`/`Infinity` statt `0` heraus).\n\n### Suggestion\n- Setze im Konstruktor den Anfangszustand des Meters bewusst: Kapazität übernehmen und den aktuellen Füllstand auf einen definierten Startwert setzen.\n- Überlege für `percentFull()`: „Prozent = (aktueller Füllstand / Kapazität) * 100“. Prüfe dabei separat den Spezialfall `capacity == 0` und vermeide jede Rechnung, die `level` im Nenner haben könnte.\n\n### Code Style\n- `capacity` und `level` sind als `public` deklariert; üblich wäre, den Zustand zu kapseln (z. B. `private`) und nur über Methoden zu verändern/abzufragen.\n- In den `if/else`-Blöcken nach `throw` ist das `else` nicht nötig (reduziert Einrückung und macht den Code leichter lesbar).\n- Die Attribute haben viele `this.`-Qualifizierungen, die nicht überall nötig sind (nur wo es Namenskonflikte gibt).\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- In der Aufgabenstellung steht, dass die Klasse so verwendet werden soll, dass das Attribut `avgSteps` heisst (`double avgSteps = stats.averageSteps;` ist dort *nicht* gezeigt). In deiner Implementierung heisst das Attribut `averageSteps`, was nicht zur vorgegebenen Nutzung passt.\n- In der Aufgabenstellung steht auch explizit `int min = stats.minSteps; int max = stats.maxSteps;` und `double avgSteps = stats.averageSteps;` sowie `int successDays = stats.successDays;`: Bei dir sind zwar `successDays`, `minSteps`, `maxSteps` vorhanden, aber der Durchschnitt ist nicht unter dem erwarteten Namen verfügbar.\n\n### Suggestion\n- Richte die Attributnamen in `StepStatistics` exakt nach dem im Aufgabenblatt gezeigten Zugriff aus (insbesondere beim Durchschnitt). Wenn du unsicher bist: orientiere dich an den Variablennamen in dem Code-Snippet der Aufgabenstellung, nicht an deinen eigenen.\n- Prüfe danach, ob du im Client (`StepTracker`) weiterhin genau die Felder verwendest, die die Aufgabe demonstriert.\n\n### Code Style\n- In `StepTracker` fehlen im geposteten Attempt die `package`-Deklaration und die Imports (z. B. für `Scanner`) sowie die umschliessende Klasse `StepTracker` mit `public static void main(String[] args)`. Falls das nur beim Kopieren verloren ging, ok—sonst wird es so nicht kompilieren.\n- Du verwendest `IO.print/println` statt `System.out...`. Das kann je nach Template ok sein, aber achte darauf, dass das konsistent zum restlichen Projekt/Template ist (und dass `IO` wirklich verfügbar/importiert ist).\n- Bei `Math.min(minSteps, step)` / `Math.max(maxSteps, step)` ist das `this.` links korrekt, aber rechts nicht nötig; konsistenter wäre entweder überall oder nirgends `this.` zu verwenden.\n",
"status" : "SUCCESS"
}
}