Quiz
Ein Projekt ohne Grafik – dafür mit allem, was du über Klassen, Felder und Kontrollstrukturen gelernt hast. Am Ende habt ihr ein lauffähiges Quizprogramm, dessen Fragen ihr selbst schreibt.
Das Ziel
Das Programm stellt nacheinander mehrere Fragen mit je vier Antwortmöglichkeiten, liest die Antwort ein, gibt Rückmeldung und wertet am Ende aus.
Frage 1 von 5
Welchen Index hat das erste Element eines Feldes?
1) 1
2) 0
3) -1
4) die Länge minus 1
Deine Antwort: 2
Richtig!
...
Ergebnis: 4 von 5 richtig (80 Prozent) - gut gemacht!
Die Modellierung
Bevor ihr programmiert: Modelliert das Problem.
a) Welche Klassen braucht ihr? Ermittelt die beteiligten Objekte, ihre Eigenschaften und ihre Operationen.
b) Zeichnet das Implementationsdiagramm mit Attributen, Methoden und Beziehungen.
c) Legt die Kardinalitäten fest: Wie viele Fragen kennt ein Quiz?
Auflösung: ein tragfähiger Entwurf
classDiagram
class Quiz {
-String titel
-Frage[] fragen
-int anzahl
-int richtige
+Quiz(String pTitel, int pMaxFragen)
+boolean nimmAuf(Frage pFrage)
+void starte()
+int getRichtige()
}
class Frage {
-String text
-String[] antworten
-int richtigeNummer
+Frage(String pText, String[] pAntworten, int pRichtige)
+void zeigeAn()
+boolean pruefe(int pNummer)
+String getRichtigeAntwort()
}
Quiz --> "0..*" Frage : fragen
Zwei Klassen genügen. Frage weiß alles über eine einzelne Frage, Quiz verwaltet die Sammlung und den Ablauf.
Wichtig: Frage gibt nicht selbst aus, welche Antwort richtig war – sie beantwortet nur die Frage „stimmt Nummer x?“. So bleibt der Ablauf in einer Hand.
Das Gerüst
Die Teilaufgaben
Aufgabe 1 – nimmAuf
Wie bei der Klasse Kurs aus Kapitel 6: Nimm die Frage auf den nächsten freien Platz, wenn noch Platz ist.
Aufgabe 2 – starte
Der Kern des Programms. Für jede Frage:
- Nummer der Frage anzeigen („Frage 2 von 5“)
- Die Frage anzeigen lassen
- Antwort einlesen
- Prüfen, Rückmeldung geben, bei einer richtigen Antwort mitzählen
Am Ende: Anzahl richtiger Antworten, Prozentsatz und eine passende Bemerkung.
Aufgabe 3 – zeigeAn
Fragetext ausgeben, danach die Antworten nummeriert von 1 an. Denk an den Versatz zwischen Nummer und Index.
Aufgabe 4 – pruefe
Eine Zeile.
Tipp zu Aufgabe 2: das Gerüst
for (int i = 0; i < anzahl; i++) {
IO.println("");
IO.println("Frage " + (i + 1) + " von " + anzahl);
fragen[i].zeigeAn();
int antwort = Integer.parseInt(IO.readln("Deine Antwort: "));
if (fragen[i].pruefe(antwort)) {
// ...
} else {
// ...
}
}
Tipp zu Aufgabe 3: der Versatz
Die erste Antwort steht an Index 0, soll aber als „1)“ angezeigt werden. Also IO.println(" " + (i + 1) + ") " + antworten[i]);
Denselben Versatz brauchst du in pruefe – dort in die andere Richtung.
Erweiterungen
Wenn das Grundgerüst läuft, wählt aus:
Zufällige Reihenfolge. Mischt die Fragen vor dem Start. Der Algorithmus dafür: Gehe das Feld von hinten nach vorne durch und vertausche jedes Element mit einem zufällig gewählten aus dem Bereich davor.
Falsche Fragen wiederholen. Sammelt die falsch beantworteten Fragen und stellt sie am Ende noch einmal.
Eingaben absichern. Was passiert bei der Eingabe abc oder 7? Fangt beides ab.
Punkte statt Anzahl. Gebt jeder Frage einen Schwierigkeitsgrad und damit unterschiedlich viele Punkte. Welches Attribut kommt dafür wo dazu?
Fragenkatalog arbeitsteilig. Jede Gruppe schreibt fünf Fragen zu einem Kapitel dieses Lernpfads. Am Ende habt ihr ein Quiz über den gesamten Stoff – und könnt euch damit auf die Klausur vorbereiten.
Beurteilung
| Kriterium | Frage |
|---|---|
| Modellierung | Sind Zuständigkeiten sauber getrennt? Weiß jede Klasse nur, was sie wissen muss? |
| Kapselung | Sind alle Attribute privat? Gibt es nur die Getter, die wirklich gebraucht werden? |
| Robustheit | Was passiert bei unsinnigen Eingaben? |
| Dokumentation | Ist jede Methode kommentiert – mit Bedeutung der Parameter und der Rückgabe? |
| Sonderfälle | Was macht das Programm bei einem Quiz ohne Fragen? |