{
"llm" : {
"feedback" : "Exercise: prime\n\n1. Correctness\n- `isPrime` gibt unabhängig vom Wert von `x` immer `false` zurück und prüft damit nicht, ob `x` eine Primzahl ist.\n- Es fehlt die geforderte sequenzielle Suche nach einem Teiler `t` mit `1 < t < x` und `x % t == 0`.\n\n2. Suggestion\n- Überlege dir, welche Werte `t` du der Reihe nach testen musst, um einen möglichen Teiler zu finden, und wie du erkennst, dass `x` nicht prim ist (Sobald du ein `t` findest, das `x` ohne Rest teilt).\n- Denke auch daran, wann du sicher „prim“ zurückgeben darfst: nämlich wenn du alle relevanten `t` geprüft hast, ohne einen Teiler zu finden.\n- Starte mit den kleinsten sinnvollen Kandidaten für `t` und definiere klar, wo die Suche endet (welche obere Grenze du für `t` wählst).\n\n3. Code Style\n- Der Kommentar `// TODO: implement exercise for dividing number` ist sehr allgemein; sobald du implementierst, ersetze ihn durch einen präziseren Kommentar oder entferne ihn.\n\n\nExercise: binsearchfirst\n\n1. Correctness\n- `binSearch` ist nicht implementiert und gibt immer `0` zurück, unabhängig von `data` und `value`.\n- Damit werden weder der Index des ersten Vorkommens bei Mehrfachwerten noch die korrekte Einfügeposition zurückgegeben, wenn der Wert nicht vorhanden ist.\n\n2. Suggestion\n- Baue die binäre Suche so auf, dass sie nicht beim ersten Treffer stoppt, sondern weiter nach links sucht, um den kleinsten Index zu finden.\n- Überlege dir eine Schleifeninvariante mit zwei Bereichen (links “< value”, rechts “>= value”), sodass nach der Schleife die Grenze direkt die Einfügeposition ergibt.\n- Teste gedanklich mit Fällen wie: Wert kleiner als alle, größer als alle, vorhanden mehrfach (z.B. …, 24, 24, 24, …), und nicht vorhanden zwischen zwei Zahlen.\n\n3. Code Style\n- Der TODO-Kommentar ist noch vorhanden; entferne ihn oder ersetze ihn durch eine kurze Beschreibung der finalen Logik, sobald implementiert.\n\n\nExercise: tripleseqsearch\n\n### 1. Correctness\n- Wenn keine `7` im Array vorkommt, liefert `hasSeven` trotzdem `0` zurück; danach prüfst du `nums[0] == 7`, was falsche Ergebnisse erzeugen kann und außerdem die Suche nach negativer/gerader Zahl an einer falschen Stelle starten lässt.\n- Wenn es zwar eine `7` gibt, aber **keine negative Zahl danach**, liefert `hasNeg` ebenfalls `0` zurück; dann prüfst du `nums[0] < 0` und suchst die gerade Zahl ab Index `1` – das kann `true` ergeben, obwohl die geforderte Reihenfolge (7 → negativ → gerade) nicht erfüllt ist.\n- Durch diese „Default-Index 0“-Rückgaben können Arrays fälschlich `true` liefern, obwohl ein Teil der Sequenz fehlt oder an der falschen Position liegt.\n\n### 2. Suggestion\n- Überlege dir für die Suchfunktionen einen Rückgabewert, der eindeutig bedeutet „nicht gefunden“ (statt `0`), und prüfe diesen Wert, bevor du mit dem nächsten Schritt weitermachst.\n- Achte darauf, dass der Startpunkt der nächsten Suche nur dann verwendet wird, wenn das vorherige Element wirklich gefunden wurde; andernfalls solltest du gar nicht erst weiterprüfen.\n- Teste gezielt Fälle wie „keine 7 vorhanden“, „7 vorhanden aber keine negative danach“, „7 und negative vorhanden aber keine gerade danach“, um zu sehen, wo deine aktuelle Logik durch den Rückgabewert `0` aus dem Tritt kommt.\n\n### 3. Code Style\n- Die Methoden `hasSeven` und `hasNeg` heißen wie boolean-Prüfungen, geben aber einen Index zurück; das ist verwirrend. Bessere Namen würden klar machen, dass ein Index (oder „nicht gefunden“) geliefert wird.\n- Mische bei Variablennamen `seven_pos`, `neg_pos`, `has_seven` Java-untypische Snake-Case-Schreibweise; in Java ist camelCase üblich.\n\n\nExercise: sqrt\n\n## 1. Correctness\n- Die Methode `squareRoot(double x)` ist nicht implementiert und gibt immer `0` zurück, erfüllt also die Anforderung (Quadratwurzel per binärer Suche approximieren) nicht.\n- Es fehlt die Initialisierung von `low` und `high` abhängig davon, ob `x > 1` oder `x < 1` gilt (die Übungsbeschreibung verlangt unterschiedliche Startgrenzen).\n- Die Iteration/Schleife, die `low` und `high` mittels `mid = low/2 + high/2` schrittweise annähert, fehlt vollständig.\n- Das Abbruchkriterium „keine weitere darstellbare Zahl zwischen den Grenzen“ (z.B. `low == mid || high == mid`) ist nicht umgesetzt.\n- Die Auswahl der besseren Näherung am Ende (die Grenze, deren Quadrat näher an `x` liegt) ist nicht umgesetzt.\n\n## 2. Suggestion\n- Starte damit, die in der Aufgabenstellung beschriebenen Fälle für die Anfangsgrenzen (`x > 1` vs. `x < 1`) direkt als `low`/`high` festzulegen und prüfe mit ein paar Beispielen, ob die echte Wurzel sicher dazwischen liegt.\n- Baue dann eine Schleife, die aus `low` und `high` den `mid` berechnet (genau mit der angegebenen Formel) und anhand von `mid*mid` entscheidet, ob `mid` eher zur unteren oder zur oberen Grenze werden soll.\n- Verwende als Schleifenbedingung das in der Aufgabe genannte „keine darstellbare Zahl mehr dazwischen“-Kriterium, d.h. prüfe nach der `mid`-Berechnung, ob `mid` schon mit `low` oder `high` identisch ist.\n- Wenn die Schleife endet, vergleiche, ob `low*low` oder `high*high` näher bei `x` liegt, und gib entsprechend eine der beiden Grenzen zurück (statt `mid`).\n\n## 3. Code Style\n- Der Kommentar `// TODO: Implement bisection for square root` ist okay als Platzhalter, aber sobald du implementierst, wäre ein kurzer erklärender Kommentar zur Abbruchbedingung (warum `low==mid || high==mid`) hilfreicher als ein generisches TODO.\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>"
} ]
}
}