Wenn man schon den 100. Artikel in einer Kategorie schreibt, darf es ruhig mal etwas Besonderes sein, oder?
Für meinen 100. Beitrag in der Kategorie Java wollte ich jedenfalls nicht einfach nur das nächste kleine Syntax-Thema heruntertippen. Stattdessen hatte ich Lust auf ein Projekt, das zum Anlass passt und gleichzeitig etwas ist, das gerade für Anfänger spannend sein kann.
Also bauen wir heute ein kleines Java-Quiz für die Konsole.
Der kleine Twist dabei: Der fertige Code besteht aus genau 100 nicht-leeren Zeilen.
Das ist natürlich in erster Linie eine kleine Challenge passend zum Jubiläum. Aber das Ganze ist nicht nur Spielerei. In diesem Projekt stecken nämlich gleich mehrere wichtige Java-Grundlagen:
- Benutzereingaben mit
Scanner - Methoden mit Parametern
- Rückgabewerte
- Bedingungen mit
if - Schleifen zur Eingabeprüfung
- eine saubere Struktur in mehrere Methoden
Am Ende des Artikels findest du dann den vollständigen Code in exakt 100 Zeilen. Vorher schauen wir uns aber erst einmal an, wie das Quiz überhaupt aufgebaut ist.
Was unser Java-Quiz können soll
Das Programm läuft in der Konsole und stellt dem Benutzer fünf Fragen zu Java-Grundlagen. Zu jeder Frage gibt es drei Antwortmöglichkeiten: A, B oder C.
Für jede richtige Antwort gibt es einen Punkt. Am Ende wird ausgegeben, wie viele Punkte erreicht wurden und es gibt noch eine kleine Bewertung dazu.
Das Projekt ist also bewusst überschaubar gehalten. Genau das macht es für Anfänger so interessant: Es ist klein genug, um nicht zu überfordern, aber groß genug, um zu zeigen, wie mehrere Java-Konzepte zusammenarbeiten.
Die Regel für die 100 Zeilen
Damit das Ganze auch wirklich nachvollziehbar bleibt, legen wir die Regeln direkt fest:
- Gezählt werden alle nicht-leeren Codezeilen
import-Zeilen zählen mit- Kommentare sind in der finalen Version nicht enthalten
- Leerzeilen zählen nicht mit
So bleibt die kleine 100-Zeilen-Challenge fair und transparent.
Der Einstieg ins Programm
Wie bei jedem Java-Programm brauchen wir zunächst eine Klasse und eine main-Methode. Dort startet unser Quiz.
import java.util.Scanner;
public class JavaQuiz100 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
showTitle();
showRules();
int score = 0;
scanner.close();
}
}
Hier sieht man schon die ersten wichtigen Bausteine:
- Mit
import java.util.Scanner;holen wir uns die Klasse für Benutzereingaben. - In der
main-Methode erzeugen wir einenScanner. - Danach rufen wir zwei Methoden auf, die Titel und Regeln ausgeben.
- Außerdem legen wir mit
scoreden Punktestand an.
Gerade am Anfang ist es hilfreich, sich solche Grundstrukturen einzuprägen. Viele kleine Konsolenprogramme in Java starten sehr ähnlich: Eingaben vorbereiten, Variablen anlegen und dann nach und nach die eigentliche Logik ergänzen.
Titel und Regeln in eigene Methoden auslagern
Statt die komplette Ausgabe direkt in die main-Methode zu schreiben, packen wir diese Teile in eigene Methoden.
public static void showTitle() {
System.out.println("=== Java Quiz zum 100. Artikel ===");
System.out.println("Teste dein Java-Grundwissen.");
System.out.println("Beantworte jede Frage mit A, B oder C.");
System.out.println();
}
public static void showRules() {
System.out.println("So funktioniert das Quiz:");
System.out.println("Du beantwortest 5 Fragen mit A, B oder C.");
System.out.println("Fuer jede richtige Antwort bekommst du 1 Punkt.");
System.out.println("Falsche Eingaben werden erneut abgefragt.");
System.out.println("Am Ende bekommst du eine kleine Bewertung.");
System.out.println();
}
Der Vorteil ist ziemlich offensichtlich: Die main-Methode bleibt dadurch deutlich übersichtlicher.
Und genau das ist auch einer der wichtigsten Gründe, warum Methoden so nützlich sind: Sie helfen dir dabei, deinen Code sauber zu strukturieren. Gerade für Anfänger ist das ein Punkt, den man nicht früh genug lernen kann.
Fragen stellen und Punkte sammeln
Natürlich braucht ein Quiz auch Fragen. Die Idee ist hier, dass wir nicht für jede Frage komplett neuen Code schreiben, sondern immer wieder dieselbe Methode aufrufen.
Das könnte zum Beispiel so aussehen:
score += askQuestion(scanner,
"Was macht eine if-Anweisung in Java?",
"A) Sie wiederholt Code mehrfach",
"B) Sie prueft eine Bedingung",
"C) Sie beendet das Programm",
"B");
score += askQuestion(scanner,
"Wofuer benutzt man eine Methode?",
"A) Um Code zu strukturieren",
"B) Um nur Zahlen zu speichern",
"C) Um Java zu installieren",
"A");
Das ist ein schöner Moment, um gleich mehrere Dinge auf einmal zu verstehen:
- Wir übergeben Werte an eine Methode
- Die Methode liefert uns einen Rückgabewert zurück
- Diesen Rückgabewert addieren wir direkt auf unseren Punktestand
Die Zeile score += askQuestion(...) bedeutet im Grunde nichts anderes als:
Rufe die Methode auf und addiere das Ergebnis zu
score.
Wenn die Antwort richtig ist, gibt die Methode 1 zurück. Wenn sie falsch ist, 0.
Die zentrale Methode für jede Quizfrage
Jetzt kommen wir zum Herzstück des Programms: der Methode, die eine einzelne Frage stellt und auswertet.
public static int askQuestion(Scanner scanner, String question, String optionA, String optionB, String optionC, String correctAnswer) {
System.out.println(question);
System.out.println(optionA);
System.out.println(optionB);
System.out.println(optionC);
System.out.print("Deine Antwort: ");
String input = scanner.nextLine().trim().toUpperCase();
while (!input.equals("A") && !input.equals("B") && !input.equals("C")) {
System.out.print("Bitte gib nur A, B oder C ein: ");
input = scanner.nextLine().trim().toUpperCase();
}
if (input.equals(correctAnswer)) {
System.out.println("Richtig!");
System.out.println();
return 1;
} else {
System.out.println("Leider falsch.");
System.out.println("Richtig waere: " + correctAnswer);
System.out.println();
return 0;
}
}
Diese Methode bekommt alles, was sie braucht:
- den Scanner
- die eigentliche Frage
- die drei Antwortmöglichkeiten
- die richtige Lösung
Dadurch können wir dieselbe Logik für alle Fragen wiederverwenden. Das spart nicht nur Code, sondern macht das Programm auch deutlich sauberer.
Eingabe einlesen und vorbereiten
Besonders spannend ist diese Zeile:
String input = scanner.nextLine().trim().toUpperCase();
Hier passiert gleich einiges auf einmal:
nextLine()liest die Eingabe eintrim()entfernt überflüssige LeerzeichentoUpperCase()macht aus kleinen Buchstaben große
Dadurch ist es zum Beispiel egal, ob jemand a, oder A eingibt. Am Ende landet immer ein sauber vergleichbarer Wert in der Variable.
Eingabe prüfen
Damit nicht irgendein Unsinn eingegeben wird, prüfen wir die Eingabe mit einer while-Schleife:
while (!input.equals("A") && !input.equals("B") && !input.equals("C")) {
System.out.print("Bitte gib nur A, B oder C ein: ");
input = scanner.nextLine().trim().toUpperCase();
}
Die Schleife läuft so lange, bis wirklich A, B oder C eingegeben wurde.
Das ist ein schönes Beispiel dafür, wie Schleifen in echten Programmen genutzt werden können: nicht nur zum Zählen, sondern auch für sinnvolle Eingabeprüfungen.
Antworten vergleichen
Anschließend wird geschaut, ob die Antwort richtig war:
if (input.equals(correctAnswer)) {
return 1;
} else {
return 0;
}
Hier sieht man übrigens auch einen Klassiker aus Java, über den Anfänger früher oder später fast immer stolpern:
Strings sollte man in Java inhaltlich mit equals() vergleichen und nicht mit ==.
== prüft bei Objekten nicht den Inhalt, sondern die Referenz. Für unseren Fall ist equals() also die richtige Wahl.
Das Ergebnis ausgeben
Wenn alle Fragen beantwortet wurden, fehlt nur noch die Auswertung.
public static void showResult(int score) {
System.out.println("=== Ergebnis ===");
System.out.println("Du hast " + score + " von 5 Punkten erreicht.");
if (score == 5) {
System.out.println("Perfekt! Stark gemacht.");
} else if (score >= 3) {
System.out.println("Gute Leistung! Die Grundlagen sitzen schon.");
} else {
System.out.println("Kein Problem - einfach weiter ueben.");
}
}
Hier wird also zunächst die erreichte Punktzahl angezeigt. Danach gibt es je nach Ergebnis noch einen kleinen Kommentar.
Auch hier stecken wieder Grundlagen drin, die für Anfänger wichtig sind: if, else if und else.
Warum dieses Projekt für Anfänger gut funktioniert
Ich mag an solchen kleinen Projekten vor allem, dass sie mehrere Themen auf einmal zusammenbringen.
Statt nur trockene Einzelbeispiele zu sehen, bekommt man hier ein kleines, funktionierendes Gesamtprogramm. Und genau das ist oft der Punkt, an dem sich Syntax endlich sinnvoll anfühlt.
In diesem Quiz stecken unter anderem:
- Eingaben mit
Scanner - Methoden mit Parametern
- Rückgabewerte mit
int - Bedingungen
- Schleifen
- String-Vergleiche mit
equals()
Das ist für 100 Zeilen eigentlich schon eine ganze Menge.
Ideen zum Weiterbauen
Wenn du das Quiz nicht nur nachbauen, sondern auch erweitern möchtest, gibt es viele Möglichkeiten:
- weitere Fragen hinzufügen
- die Reihenfolge der Fragen mischen
- mehrere Spielrunden erlauben
- einen Highscore speichern
- Fragen aus einer Datei laden
- am Ende alle richtigen Antworten gesammelt ausgeben
Gerade wenn du noch am Anfang mit Java stehst, sind solche Erweiterungen Gold wert. Du startest nicht bei null, sondern baust auf einem funktionierenden Projekt auf.
Der vollständige Code in exakt 100 Zeilen
Und jetzt zum Abschluss der vollständige Code des Quiz-Spiels.
In dieser finalen Version besteht das Programm aus genau 100 nicht-leeren Zeilen.
import java.util.Scanner;
public class JavaQuiz100 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
showTitle();
showRules();
int score = 0;
score += askQuestion(scanner,
"Was macht eine if-Anweisung in Java?",
"A) Sie wiederholt Code mehrfach",
"B) Sie prueft eine Bedingung",
"C) Sie beendet das Programm",
"B");
score += askQuestion(scanner,
"Wofuer benutzt man eine Methode?",
"A) Um Code zu strukturieren",
"B) Um nur Zahlen zu speichern",
"C) Um Java zu installieren",
"A");
score += askQuestion(scanner,
"Welche Klasse wird oft fuer Eingaben genutzt?",
"A) Printer",
"B) Reader",
"C) Scanner",
"C");
score += askQuestion(scanner,
"Wie vergleicht man Strings inhaltlich?",
"A) Mit ==",
"B) Mit equals()",
"C) Mit compareText()",
"B");
score += askQuestion(scanner,
"Welche Schleife eignet sich fuer Wiederholungen?",
"A) for",
"B) text",
"C) return",
"A");
showResult(score);
scanner.close();
}
public static void showTitle() {
System.out.println("=== Java Quiz zum 100. Artikel ===");
System.out.println("Teste dein Java-Grundwissen.");
System.out.println("Beantworte jede Frage mit A, B oder C.");
System.out.println();
}
public static void showRules() {
System.out.println("So funktioniert das Quiz:");
System.out.println("Du beantwortest 5 Fragen mit A, B oder C.");
System.out.println("Fuer jede richtige Antwort bekommst du 1 Punkt.");
System.out.println("Falsche Eingaben werden erneut abgefragt.");
System.out.println("Am Ende bekommst du eine kleine Bewertung.");
System.out.println();
}
public static int askQuestion(
Scanner scanner,
String question,
String optionA,
String optionB,
String optionC,
String correctAnswer) {
System.out.println(question);
System.out.println(optionA);
System.out.println(optionB);
System.out.println(optionC);
System.out.print("Deine Antwort: ");
String input = scanner.nextLine().trim().toUpperCase();
while (!input.equals("A") && !input.equals("B") && !input.equals("C")) {
System.out.print("Bitte gib nur A, B oder C ein: ");
input = scanner.nextLine().trim().toUpperCase();
}
if (input.equals(correctAnswer)) {
System.out.println("Richtig!");
System.out.println();
return 1;
} else {
System.out.println("Leider falsch.");
System.out.println("Richtig waere: " + correctAnswer);
System.out.println();
return 0;
}
}
public static void showResult(int score) {
System.out.println("=== Ergebnis ===");
System.out.println("Du hast " + score + " von 5 Punkten erreicht.");
if (score == 5) {
System.out.println("Perfekt! Stark gemacht.");
} else if (score >= 3) {
System.out.println("Gute Leistung! Die Grundlagen sitzen schon.");
} else {
System.out.println("Kein Problem - einfach weiter ueben.");
}
System.out.println();
System.out.println("Idee zum Weiterbauen:");
System.out.println("- weitere Fragen");
System.out.println("- zufaellige Reihenfolge");
System.out.println("- mehrere Spielrunden");
System.out.println("Danke fuers Mitmachen.");
}
}
Fazit
Ich finde, für einen 100. Artikel ist dieses kleine Projekt eigentlich ziemlich passend.
Zum einen passt die Idee mit den 100 Zeilen Code natürlich wunderbar zum Anlass. Zum anderen zeigt das Quiz aber auch sehr schön, dass man gar kein riesiges Projekt braucht, um in Java sinnvoll zu üben.
Schon in einem kleinen Konsolenprogramm wie diesem stecken viele wichtige Grundlagen drin. Und genau solche Projekte sind oft der Punkt, an dem Java für Anfänger nicht mehr nur aus einzelnen Syntax-Regeln besteht, sondern langsam anfängt, wirklich Spaß zu machen.
Ich hoffe, du hattest beim Lesen dieses Artikels und beim Ausprobieren des kleinen Projekts genauso viel Freude, wie ich beim Schreiben und Entwickeln hatte. Danke, dass du meinen Blog so fleißig liest und mich auf diesem Weg begleitest. Wenn dir der Beitrag gefallen hat, würde ich mich sehr freuen, wenn du ihn teilst und ein bisschen mit in die Welt hinausträgst.
