{
"llm" : {
"feedback" : "# Exercise: todo\n\n### Correctness\n- In `markTaskDone(int id)` wird ein negativer `id`-Wert nicht abgefangen; bei `tasks[id]` führt das zu einem `ArrayIndexOutOfBoundsException` statt zur geforderten Meldung „Task with ID XX not found“.\n\n### Suggestion\n- Überlege dir vor dem Zugriff auf `tasks[id]`, welche `id`-Werte überhaupt gültige Array-Indizes sind (untere und obere Grenze) und prüfe das in einer Bedingung, bevor du auf das Array zugreifst.\n\n### Code Style\n- In `ToDoApp.java` fehlt im gezeigten Ausschnitt das Package-Statement und die Klassendeklaration; achte darauf, dass `tasks` als Feld in der `ToDoApp`-Klasse steht und `main` als `public static void main(String[] args)` definiert ist (wie im Grundgerüst erwartet).\n- Du iterierst in `listTasks` über das gesamte Array mit vielen `null`-Einträgen; mit einem separaten Zähler/„used“-Variable oder einer Liste wäre die Logik klarer und effizienter.\n- In `Task` sind `id` und `description` `final`, `done` aber öffentlich. Üblicher wäre, den Zustand zu kapseln (z.B. per Methode zum „done“ setzen), damit andere Klassen den Task nicht beliebig verändern.\n\n\n# Exercise: energymeter\n\n1. Correctness \n- Der Konstruktor ist nicht `public`. Falls die Unit-Tests die Klasse aus einem anderen Package instanziieren, können sie `new EnergyMeter(...)` so nicht aufrufen.\n\n2. Suggestion \n- Schau in die Tests, wie `EnergyMeter` erstellt wird (Zugriff von außerhalb des Packages oder nicht). Wenn dort `new EnergyMeter(...)` in einer anderen Package-Struktur steht, musst Du den Konstruktor entsprechend sichtbar machen.\n\n3. Code Style \n- Einheitliche Sprache für Parameter (z. B. überall Englisch oder überall Deutsch) würde die Lesbarkeit verbessern (`energie`, `time`, `capacity` als Parameter in `consume` wirkt verwirrend, weil es das Attribut `capacity` überschattet). \n- Klammern/Einrückung konsistenter formatieren (z. B. `{`/`}` und `else`-Blöcke), damit man die Zweige schneller erfassen kann. \n- `capacity` und `level` sind `public`; üblich wäre, Attribute zu kapseln (z. B. `private`) und Zugriff über Methoden zu steuern, damit externe Stellen den Meter nicht beliebig in inkonsistente Zustände setzen können.\n\n\n# Exercise: pong\n\n### Correctness\n- In `PongGame.java` fehlt die Klassenhülle (`public class PongGame { ... }`) und auch die `main`-Signatur ist nicht die übliche Java-Einstiegsmethode (`public static void main(String[] args)`); so wie es dasteht, ist das keine gültige Java-Programmstruktur und wird (je nach Vorlage/Projektsetup) nicht kompilieren.\n- Einige Initialisierungen (z.B. `Gui gui = ...`, `Player p1 = ...`, Arrays, Countdown) stehen auf Dateiebene außerhalb jeder Methode/Klasse; das ist in normalem Java ebenfalls nicht erlaubt (außer als Felder innerhalb einer Klasse).\n- Laut Aufgabenpunkt e) soll der Ball, wenn er seitlich rausgeht, „von Neuem in der Mitte des Feldes“ starten. Bei dir wird der Ball beim Verlassen entfernt (`balls[i] = null`) und es kommt später evtl. irgendwann ein neuer Ball durch den Spawner dazu, aber kein unmittelbarer Restart in der Mitte für den Ball, der rausging.\n\n### Suggestion\n- Schau dir an, wie die bereitgestellte Vorlage `PongGame.java` aufgebaut ist (Klasse + `public static void main(String[] args)`); bring deine Logik in genau diese Struktur und verschiebe deine derzeit „globalen“ Variablen als Felder in die Klasse oder initialisiere sie innerhalb von `main`.\n- Überlege für den Punkt „Ball startet von Neuem in der Mitte“: Was soll beim Side-Out mit *dem* Ball passieren, der raus ist? Du entfernst ihn aktuell. Eine Möglichkeit ist, ihn direkt wieder auf die Mitte zurückzusetzen und ihm eine neue Zufallsrichtung zu geben (statt ihn nur `null` zu setzen) – ohne dass ich dir den genauen Code vorgebe.\n\n### Code Style\n- Viele Felder in `Ball` und `Player` sind `public`; kapsle Daten eher (z.B. `private`) und biete Methoden an (z.B. `draw`, `reset`, Getter), damit `PongGame` nicht überall direkt Werte umbiegt.\n- In `PongGame` mischst du `double`-Physik mit `int`-Casting beim Zeichnen. Das ist ok, aber es wird schnell unübersichtlich—konsequent entweder in `double` bleiben und erst beim Draw casten (so wie du es machst), oder klar kommentieren/strukturieren, damit keine Rundungsartefakte „zufällig“ wirken.\n- `gui.setColor(255,255,255)` und `gui.setTextAlignCenter()` setzt du in jedem Frame erneut. Das ist nicht falsch, aber unnötig repetitiv; solche statischen Einstellungen kann man oft einmalig beim Setup machen.\n\n\n# Exercise: stepstats\n\n### Correctness\n- Deine Attribute heissen `averageSteps`, aber gemäss Aufgabenstellung soll es über `stats.averageSteps` **oder** (wie im Beispiel) über `stats.avgSteps` zugreifbar sein; in der Aufgabenbeschreibung steht explizit `double avgSteps = stats.averageSteps;` – das passt bei dir nicht, weil dein Feld nicht `avgSteps` heisst.\n- In `StepTracker` ist die `main`-Methode nicht als Java-Programmeinstieg definiert (es fehlt die übliche Klassendeklaration und die korrekte `public static void main(String[] args)`-Signatur); so wie es dasteht, läuft es in einem normalen Java-Projekt nicht wie gefordert.\n\n### Suggestion\n- Schau dir die vorgegebene Verwendung in der Aufgabenstellung genau an und benenne die Attribute so, dass **die dort gezeigten Zeilen ohne Anpassung** kompilieren (insbesondere das Feld für den Durchschnitt).\n- Vergleiche deinen `StepTracker` mit der geforderten/üblichen Struktur einer Java-Startklasse: Wo müssen `package`, `class`-Header und die `main`-Signatur stehen, damit Java das Programm starten kann?\n\n### Code Style\n- In `StepStatistics` überschattest du Felder durch lokale Variablen mit gleichem Namen (`successDays`, `minSteps`, `maxSteps`). Das ist zwar legal, aber leicht verwirrend; entweder direkt in die Felder schreiben oder die lokalen Variablen anders benennen.\n- In `StepTracker` fehlen (im gezeigten Code) Imports für `Scanner` sowie ggf. die Herkunft von `IO`; achte darauf, dass die Datei in sich vollständig ist (oder klar im richtigen Package liegt), damit sie ohne “magische” Umgebung verständlich bleibt.\n",
"status" : "SUCCESS"
}
}