{
"unitTest" : {
"tests" : [ {
"name" : "buyTicketIds()",
"status" : "FAILED",
"message" : "Connection refused to host: 127.0.0.1; nested exception is: \n\tjava.net.ConnectException: Connection refused"
}, {
"name" : "buyTicketsIllegalNumbers()",
"status" : "FAILED",
"message" : "Connection refused to host: 127.0.0.1; nested exception is: \n\tjava.net.ConnectException: Connection refused"
}, {
"name" : "draw()",
"status" : "FAILED",
"message" : "Connection refused to host: 127.0.0.1; nested exception is: \n\tjava.net.ConnectException: Connection refused"
}, {
"name" : "drawNoDuplicates()",
"status" : "FAILED",
"message" : "Connection refused to host: 127.0.0.1; nested exception is: \n\tjava.net.ConnectException: Connection refused"
}, {
"name" : "drawRandom()",
"status" : "FAILED",
"message" : "Connection refused to host: 127.0.0.1; nested exception is: \n\tjava.net.ConnectException: Connection refused"
}, {
"name" : "drawAlreadyDrawn()",
"status" : "FAILED",
"message" : "Connection refused to host: 127.0.0.1; nested exception is: \n\tjava.net.ConnectException: Connection refused"
}, {
"name" : "getWinningNumbersNotDrawnYet()",
"status" : "FAILED",
"message" : "Connection refused to host: 127.0.0.1; nested exception is: \n\tjava.net.ConnectException: Connection refused"
}, {
"name" : "buyTicketAlreadyDrawn()",
"status" : "FAILED",
"message" : "Connection refused to host: 127.0.0.1; nested exception is: \n\tjava.net.ConnectException: Connection refused"
} ]
},
"llm" : {
"feedback" : "# Exercise: textanalysis\n\n### Correctness\n- `add(String word)` sammelt aktuell keine Wörter/Counts, da die Methode leer ist; damit kann die Aufgabe (Häufigkeiten zählen) nicht erfüllt werden.\n- `topWord()` liefert immer `\"\"` zurück und ermittelt nicht das am häufigsten vorkommende Wort aus den bisher hinzugefügten Wörtern.\n\n### Suggestion\n- Überlege dir eine interne Datenstruktur, die zu jedem Wort einen Zähler speichert (Wort → Anzahl). Bei jedem `add(...)` musst du diesen Zähler initialisieren oder erhöhen.\n- In `topWord()` musst du über alle gespeicherten Wörter/Zähler laufen und dir das Wort mit dem aktuell größten Zähler merken; bei Gleichstand darfst du eines davon nehmen.\n\n### Code Style\n- Es fehlt eine interne Datenstruktur als Klassenattribut (z.B. eine Collection/Map), sonst ist nicht ersichtlich, wo die Daten gespeichert werden sollen.\n- Die TODO-Kommentare und das `return \"\"` sind nur Platzhalter; entferne/ersetze sie, sobald die Logik implementiert ist.\n\n\n# Exercise: lotto\n\n### Correctness\n- `Lottery.buyTicket(...)` ist nicht implementiert und gibt immer `null` zurück; damit werden weder Ticket-IDs vergeben noch die geforderten Validierungen (genau 6 Zahlen, Bereich 1..maxNumber, alle verschieden, nur vor der Ziehung) durchgeführt.\n- `Lottery.draw()` ist nicht implementiert; es werden keine 6 zufälligen, verschiedenen Gewinnzahlen gezogen/gespeichert und der Zustand „nach der Ziehung“ entsteht nie.\n- Im `Ticket`-Konstruktor werden die Ticketzahlen nicht in einer Instanzvariable gespeichert; damit können die Ticketzahlen später nicht korrekt zurückgegeben/ausgewertet werden.\n- `Ticket.getNumbers()` ist nicht implementiert und liefert `null` statt einer Kopie der 6 Ticketzahlen.\n- `Ticket.getCorrectNumbers()` ist nicht implementiert und liefert `null`; zudem fehlt damit auch das geforderte Verhalten, vor der Ziehung eine `IllegalStateException` auszulösen.\n- `Ticket.getPrize()` ist nicht implementiert (liefert immer 0) und berechnet den Gewinn nicht gemäss Vorgabe (0→0, 1→5, jede weitere Zahl *20) und ebenfalls ohne Zustandsprüfung.\n\n### Suggestion\n- Implementiere `buyTicket` so, dass du zuerst den Zustand prüfst (vor/nach Ziehung) und dann die Eingabe in mehreren Schritten validierst (Länge, Wertebereich, Duplikate); eine `Set`-Struktur hilft dir beim „alle verschieden“-Check.\n- Für die Ticket-ID kannst du die bestehende Zählvariable nutzen: erhöhe sie erst dann, wenn das Ticket wirklich verkauft wird, und verwende den neuen Wert als ID.\n- In `draw()` brauchst du eine Zufallsquelle und eine Collection, die automatisch keine Duplikate zulässt; fülle sie so lange, bis genau 6 verschiedene Zahlen drin sind, und verhindere eine zweite Ziehung per Zustandscheck.\n- Lege im `Ticket` eine eigene Instanzvariable für die Zahlen an (Collection oder Array) und kopiere die Konstruktor-Parameter dort hinein, damit spätere Änderungen von außen dein Ticket nicht beeinflussen.\n- `getNumbers()` sollte immer eine Kopie zurückgeben (nicht die interne Struktur), damit Client-Code die Ticketzahlen nicht nachträglich verändern kann.\n- `getCorrectNumbers()` kann die Gewinnzahlen von der Lotterie holen (das erzwingt automatisch „nur nach draw“), und dann die Schnittmenge zwischen Ticketzahlen und Gewinnzahlen bilden.\n- Für `getPrize()` orientiere dich an der Anzahl korrekter Zahlen: beginne bei 0 mit 0, bei >=1 mit dem Basisbetrag und vervielfache dann pro weiterer korrekter Zahl; achte darauf, dass die Methode ebenfalls nur nach der Ziehung sinnvoll ist.\n\n### Code Style\n- In `Lottery` und `Ticket` sind mehrere `// TODO`-Stellen plus Platzhalter-Rückgaben (`null`/`0`); sobald implementiert, entferne die Platzhalter, um spätere NullPointer-/Logikfehler zu vermeiden.\n- In den Javadocs steht bei `getNumbers()` „as an ArrayList“, die Signatur gibt aber `Integer[]` zurück; passe Kommentar und Implementationsidee konsistent zur Signatur an.\n",
"status" : "SUCCESS"
}
}