Java Schnellstart – Coding Challenge 4 – Wer wird Zillionär?

Bevor wir das Modul abschließen, wollen wir zum Schluss ein Quiz programmieren. Sämtliche Inhalte des letzten Moduls sowie die vorigen Lektionen werden so wiederholt und in der Praxis angewandt.

Quiz: Wer wird Zillionär?

Du sollst ein Quiz programmieren. In einer Textdatei befinden sich bereits mehrere Fragen. Jede Frage hat 4 Antworten sowie eine richtige Lösung.

So ist die Struktur der Textdatei aufgebaut:

  • Die erste Zeile beinhaltet die Frage,
  • die zweite Zeile enthält die Antwortmöglichkeit 1,
  • die dritte Zeile enthält Antwortmöglichkeit 2,
  • die vierte Zeile enthält Antwortmöglichkeit 3 und
  • die fünfte Zeile enthält Antwortmöglichkeit 4.
  • In der darauffolgenden Zeile befindet sich die richtige Antwort als Zahl (1, 2, 3 oder 4).

Dieses Schema wiederholt sich in der darauffolgenden Zeile.

Nachfolgend findest du den Inhalt der Textdatei "fragen.txt":

Welcher Datentyp kann keine Zahlen speichern?
double
String
float
int
2
Welche Schleife wird mindestens einmal ausgeführt?
for-Schleife
While-Schleife
foreach-Schleife
Do-While-Schleife
4
Welche Werte kann ein boolean speichern?
1 bis 128
Ein beliebiges Zeichen
true oder false
null
3
Um welche von Umwandlungsart handelt es sich hierbei: (int)0.5d ?
explizite Umwandlung
implizite Umwandlung
polymorphe Umwandlung
referenzierte Umwandlung
1
Wieso funktioniert das folgende Beispiel nicht: String s = 500;
Der Text ist zu lang
Es fehlen Anführungszeichen, damit die 500 als Text erkannt wird
Ein String kann nur Kommazahlen speichern
Es handelt sich um ein Objekt d.h. hier fehlt das new Schlüsselwort
2

Die Daten der Textdatei "fragen.txt" sind im Code-Editor bereits vorhanden. Deine Aufgaben findest du unter dem Editor.

[lp_spoiler title="Aufgabe 1 - Daten einlesen" class="da"]

Aufgabe 1: Daten einlesen

Zunächst müssen wir unsere Fragen einlesen. Du hast zur Lösung dieser Aufgabe bereits die  Klassen File und Scanner kennengelernt. Importiere daher beide Klassen in den ersten Zeilen deines Java Programms.

Da die Textdatei mehrere Fragen enthält, wollen wir diese nacheinander einlesen. Solange es also eine Frage gibt, wollen wir diese "einlesen". Aus dem letzten Satz ergibt sich bereits das zu verwendende Werkzeug (nämlich die while-Schleife). Implementiere eine Schleife, welche im Schleifen-Rumpf (Code der While-Schleife) jeweils die Fragen, Antwortmöglichkeiten und die richtigen Antworten einliest.

Da die Antwortmöglichkeiten kontextuell zusammengehören, können wir diese in einem Array mit der Größe 4 speichern. Implementiere eine weitere Schleife (for-Schleife), die nach dem Auslesen der Frage, ein Array der vier Antwortmöglichkeiten einliest.

[/lp_spoiler]

[lp_spoiler title="Aufgabe 1 - Lösung" class="da"]

Lösung:

import java.util.Scanner;
import java.io.File;
import java.io.IOException;

class Main {
  public static void main(String[] args) throws IOException{
   File fragen = new File("fragen.txt");
   Scanner fragenLeser = new Scanner(fragen);

   while(fragenLeser.hasNextLine())
   {
      String frage = fragenLeser.nextLine();
      String[] antwortMöglichkeiten = new String[4];
      for(int i = 0; i < antwortMöglichkeiten.length; i++)
      {
          antwortMöglichkeiten[i] = fragenLeser.nextLine();
      }
      int antwort = Integer.parseInt(fragenLeser.nextLine()) - 1; // Der Zähler soll bei 0 starten, daher rechnen wir -1
   }
  }
}

[/lp_spoiler]

[lp_spoiler title="Aufgabe 2 - Ausgabe der Frage und Antwortmöglichkeiten" class="da"]

Aufgabe 2: Ausgabe der Frage und der Antwortmöglichkeiten

Gib nun für jede Frage, den jeweiligen "Fragetext" und die jeweiligen "Antwortmöglichkeiten" aus.

[/lp_spoiler]

[lp_spoiler title="Aufgabe 2 - Lösung" class="da"]

Lösung:

import java.util.Scanner;
import java.io.File;
import java.io.IOException;

class Main {
  public static void main(String[] args) throws IOException{
   File fragen = new File("fragen.txt");
   Scanner fragenLeser = new Scanner(fragen);

   while(fragenLeser.hasNextLine())
   {
      String frage = fragenLeser.nextLine();
       System.out.println("Frage: " + frage);
      String[] antwortMöglichkeiten = new String[4];
      for(int i = 0; i < antwortMöglichkeiten.length; i++)
      {
          antwortMöglichkeiten[i] = fragenLeser.nextLine();
          System.out.println(i+". " + antwortMöglichkeiten[i]);
      }
      int antwort = Integer.parseInt(fragenLeser.nextLine()) - 1;
      System.out.println(""); // Neue leere Zeile, zur besseren Übersicht
      
   }
  }
}

[/lp_spoiler]

[lp_spoiler title="Aufgabe 3 - User-Input" class="da"]

Aufgabe 3: User-Input

Bevor wir von einer Frage zur nächsten Frage springen, wollen wir dem Nutzer die Möglichkeit geben, die Frage zu beantworten.

  1. Wir brauchen also einen User-Input, den wir über die Scanner-Klasse bewerkstelligen.
  2. Danach müssen wir den User-Input auswerten. Die eingegebene Zahl des Users (die Antwort auf die Frage) wird mit der Variablen "antwort" verglichen. Stimmt diese nicht mit dem User-Input überein, so war die Antwort falsch.
  3. Die Schleife soll dann abgebrochen werden, da der User das Quiz "verloren" hat.

[/lp_spoiler]

[lp_spoiler title="Aufgabe 3 - Lösung" class="da"]

Lösung:

import java.util.Scanner;
import java.io.File;
import java.io.IOException;

class Main {
  public static void main(String[] args) throws IOException{
   File fragen = new File("fragen.txt");
   Scanner fragenLeser = new Scanner(fragen);
   Scanner benutzerAntwort = new Scanner(System.in);
   while(fragenLeser.hasNextLine())
   {
      String frage = fragenLeser.nextLine();
       System.out.println("Frage: " + frage);
      String[] antwortMöglichkeiten = new String[4];
      for(int i = 0; i < antwortMöglichkeiten.length; i++)
      {
          antwortMöglichkeiten[i] = fragenLeser.nextLine();
          System.out.println(i+". " + antwortMöglichkeiten[i]);
      }
      int antwort = Integer.parseInt(fragenLeser.nextLine()) - 1;
      System.out.println(""); // Neue Zeile, zu besseren Übersicht

      int benutzerAntwortZahl = Integer.parseInt(benutzerAntwort.nextLine());
      if(antwort != benutzerAntwortZahl)
      {
        System.out.println("Das war leider die falsche Antwort. Richtig wäre " + antwort);
        break;
      }
   }
  }
}

[/lp_spoiler]

[lp_spoiler title="Aufgabe 4 - Punktestand programmieren" class="da"]

Score: Gewinn

Als finale Aufgabe implementierst du einen Geldstand. Je mehr Fragen richtig beantwortet werden, desto höher steigt der Geldstand.

  1. Der User startet mit 50€
  2. Nach jeder richtigen Frage verdoppelt sich der Geldstand.

[/lp_spoiler]

[lp_spoiler title="Aufgabe 4 - Lösung gesamtes Quiz" class="da"]

Lösung:

import java.util.Scanner;
import java.io.File;
import java.io.IOException;

class Main {
  public static void main(String[] args) throws IOException{
   File fragen = new File("fragen.txt");
   Scanner fragenLeser = new Scanner(fragen);
   Scanner benutzerAntwort = new Scanner(System.in);
   long geldStand = 50;
   while(fragenLeser.hasNextLine())
   {
      String frage = fragenLeser.nextLine();
       System.out.println("Frage ("+geldStand*2+"€): " + frage);
      String[] antwortMöglichkeiten = new String[4];
      for(int i = 0; i < antwortMöglichkeiten.length; i++)
      {
          antwortMöglichkeiten[i] = fragenLeser.nextLine();
          System.out.println(i+". " + antwortMöglichkeiten[i]);
      }
      int antwort = Integer.parseInt(fragenLeser.nextLine()) - 1;
      System.out.println(""); // Neue Zeile, zu besseren Übersicht

      int benutzerAntwortZahl = Integer.parseInt(benutzerAntwort.nextLine());
      if(antwort != benutzerAntwortZahl)
      {
        System.out.println("Das war leider die falsche Antwort, richtig wäre " + antwort);
        break;
      }
      geldStand *= 2;
   }
   System.out.println();
   System.out.println("Du hast " + geldStand + "€ gewonnen!");
  }
}

[/lp_spoiler]

Fazit

Nun bist du am Ende dieses Java-Schnellstarts angelangt. Du hast die wichtigsten Werkzeuge von Java kennengelernt und weißt, wie du weiterhin fleißig lernen und neue Projekte programmieren kannst. Das LerneProgrammieren-Team wünscht dir viel Erfolg auf deinem weiteren Weg.?