AutoFeedback API

Result 293c36e6-1c0d-46f3-8fdf-ddcf3934a977

{
  "llm" : {
    "feedback" : "# Exercise: prime\n\n### Correctness\n- `isPrime` liefert für alle Eingaben immer `false`; damit wird keine Primzahl korrekt erkannt.\n- In `isPrime` fehlt die geforderte sequenzielle Suche nach einem Teiler `t` mit `1 < t < x` und `x % t == 0`.\n\n### Suggestion\n- Überlege dir eine Schleife, die mögliche Teiler `t` der Reihe nach durchgeht (beginnend bei 2) und prüft, ob `x` durch `t` ohne Rest teilbar ist.\n- Entscheide anhand des Schleifenresultats: Wenn ein solcher Teiler gefunden wird, ist `x` keine Primzahl; wenn keiner gefunden wird, ist `x` eine Primzahl.\n\n### Code Style\n- Der `TODO`-Kommentar ist noch nicht umgesetzt; entweder implementieren oder den Kommentar konkreter machen (z.B. was genau noch fehlt).\n- Die aktuelle Implementierung ist im Wesentlichen ein Platzhalter (immer `return false;`), was die Methode für Tests unbrauchbar macht, bis Logik ergänzt ist.\n\n\n# Exercise: binsearchfirst\n\n### Correctness\n- Die Methode `binSearch(int[] data, int value)` ist nicht implementiert und gibt immer `0` zurück, damit liefert sie für fast alle Eingaben ein falsches Resultat.\n- Es wird aktuell weder der erste Index bei mehrfach vorkommenden Werten gefunden, noch die Einfügeposition, falls der Wert nicht im Array enthalten ist.\n\n### Suggestion\n- Baue eine binäre Suche mit zwei Grenzen (z.B. „links“ und „rechts“) auf, die den Suchbereich immer weiter verkleinert, bis klar ist, wo die Trennstelle liegt.\n- Achte bei der Fallunterscheidung darauf, dass du bei Gleichheit nicht einfach „gefunden“ zurückgibst, sondern weiter in Richtung kleinerer Indizes suchst, um den *ersten* Treffer zu bekommen.\n- Überlege dir, was deine Grenzen am Ende repräsentieren sollen (z.B. „erste Position, an der `value` stehen dürfte“). Genau diese Position ist dann auch die gewünschte Einfügeposition, wenn `value` nicht vorkommt.\n\n### Code Style\n- Der Kommentar `// TODO` ist okay während der Arbeit, sollte aber entfernt/ersetzt werden, sobald die Methode implementiert ist.\n\n\n# Exercise: tripleseqsearch\n\n### Correctness\n- Die Methode gibt immer `false` zurück und prüft die geforderte Sequenz (7 → negative Zahl → gerade Zahl) im Array nicht.\n\n### Suggestion\n- Baue die Lösung als „Zustands“-Suche auf: Suche zuerst nach einer `7`; erst ab deren Position suchst du weiter nach einer negativen Zahl; und erst ab dieser Position suchst du weiter nach einer geraden Zahl.\n- Achte darauf, dass die Zahlen in dieser Reihenfolge vorkommen müssen, aber nicht direkt hintereinander; deshalb solltest du nach jedem Treffer nur den Suchbereich „nach rechts“ weiterführen (Index-Bereiche).\n- Überlege dir, wie du definierst, ob eine Zahl „gerade“ ist (z.B. über den Rest bei Division durch 2) und wie du „negativ“ erkennst.\n\n### Code Style\n- Der `TODO`-Kommentar ist noch unverändert; ersetze ihn durch eine kurze Erklärung deiner Suchstrategie oder entferne ihn, sobald du implementiert hast.\n\n\n# Exercise: sqrt\n\n### Correctness\n- Die Methode `squareRoot(double x)` ist nicht implementiert und gibt immer `0` zurück, statt eine Näherung der Quadratwurzel von `x` mit binärer Suche zu berechnen.\n- Es werden keine unteren/oberen Grenzen (`low`, `high`) gemäß Aufgabenbeschreibung gesetzt (abhängig davon, ob `x > 1` oder `x < 1`).\n- Es gibt keine Iteration, die die Grenzen per Binärsuche aufeinander zubewegt und dabei `mid = low/2 + high/2` verwendet.\n- Das Abbruchkriterium „zwischen den Grenzen existiert keine weitere darstellbare Zahl mehr“ (z.B. `low == mid || high == mid`) fehlt.\n- Die Auswahl der besseren der beiden Grenzen am Ende (je nachdem, welches Quadrat näher an `x` liegt) fehlt.\n\n### Suggestion\n- Fang damit an, für `x` je nach Größenbereich Startwerte für `low` und `high` zu wählen, die garantiert die Wurzel einschließen (die Aufgabe gibt dir dafür konkrete Ungleichungen).\n- Berechne in einer Schleife jeweils `mid` genau in der in der Aufgabe angegebenen Form und entscheide über `mid*mid` im Vergleich zu `x`, welche Grenze du ersetzen musst.\n- Nutze als Schleifenende das Kriterium, dass `mid` nicht mehr „zwischen“ `low` und `high` liegen kann (wegen der endlichen `double`-Darstellung).\n- Vergleiche nach der Schleife, ob `low*low` oder `high*high` näher an `x` liegt, und gib entsprechend diese Grenze zurück.\n\n### Code Style\n- Der Kommentar `// TODO: Implement bisection for square root` ist okay, aber aktuell steht dort keine Lösung; entferne TODO/Platzhalter, sobald du implementiert hast.\n- Die Methode enthält derzeit nur einen Platzhalter-Return; sobald implementiert, achte darauf, Variablennamen wie `low`, `high`, `mid` konsistent und sprechend zu verwenden.\n",
    "status" : "SUCCESS"
  },
  "unitTest" : {
    "tests" : [ {
      "name" : "testTooSmallInteger()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "testTooLargeInteger()",
      "status" : "FAILED",
      "message" : "expected: <5> but was: <0>"
    }, {
      "name" : "testZeroLengthArray()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "testNonExistingInteger()",
      "status" : "FAILED",
      "message" : "expected: <4> but was: <0>"
    }, {
      "name" : "testEqualInteger()",
      "status" : "FAILED",
      "message" : "expected: <11> but was: <0>"
    } ]
  }
}