13th Java Lesson (Java Course @ TUD)

https://github.com/Trivo25/tud-java-course

January 27, 2022

Während Ihr darauf wartet, dass es beginnt..

Java

Objektorientierte Programmierung

Florian Kluge, Moritz Schulz

  1. Januar 2022


Florian.Kluge@mailbox.tu-dresden.de

Moritz.Schulz2@mailbox.tu-dresden.de

Was wir heute machen

Projekt, Teil 1/2: Quizanwendung

  1. Projektidee
  2. Vorgehensweise
  3. (Wiederholung) Eingaben einlesen
  4. Strings vergleichen
  5. Prototyp basteln
  6. schritteweises Ausbauen

Contact

Florian Kluge

Florian.Kluge@mailbox.tu-dresden.de

Moritz Schulz

Moritz.Schulz2@mailbox.tu-dresden.de

Kurze Info zum Kurs

  • praktische Aufgaben- und Beispiel-basierte Lernweise
    • wir laufen herum und gucken, dass ihr zurecht kommt
  • bitte, fragt gern, jederzeit
    • auch per E-Mail / via Kursseite
  • uns geht es darum, alle mitzunehmen

Stay up to date

  • die E-Mails der TUD regelmäßig überprüfen
    • z.B. Bekanntgabe der Veröffentlichung der Folien
      • auf der Seite des Programmierkurses

Projektidee

  • Quizanwendung
    • stellt Fragen in der Konsole
    • überprüft Eingaben des Nutzers
  • später erweitern mit Netzwerkanfragen
    • das heißt: die Fragen und Antworten kommen von einem Server via Internet

Vorgehensweise

  • iterative Vorgehensweise
  • möglichst schnell MVP
    • Abkürzung für “Minimum Viable Product”
    • leistet gewünschtes mit minimalem Aufwand
  • ausbauen und erweitern
    • währenddessen Fehler abfangen
    • häufig testen
  • besser als: “alles auf einmal”

MVP-Entwurf

  • einen Scanner erstellen
  • Eine Frage stellen: z.B. “Wann wurde Java veröffentlicht?” (1995)
  • mit Scanner die Antwort einlesen
  • die gegebene Antwort mit der richtigen abgleichen
  • Wenn richtig, dann “Richtig!” ausgeben
  • Wenn falsch, dann “Falsch!” ausgeben

Eingaben einlesen

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

import java.util.Scanner;
public class EingabeLesen {
    public static void main (String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Wie heißt du?");
        String eingabe = scanner.nextLine();
        // hier etwa weitere Eingaben...
        // wenn abgeschlossen:
        scanner.close();
    }
}

Strings vergleichen

  • in Java sind Strings Objekte
  • str1.equals(str2) zum Vergleich nutzen
  • mit ==: keine gute Idee - vergleicht String-Referenzen, nicht String-Inhalte

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals(java.lang.Object)

public class StringsVergleichen {
    public static void main (String[] args) {
        String lieblingsfrucht = "Banane";
        String himbeere = "Himbeere";
        if (lieblingsfrucht.equals(himbeere)) {
            // in lieblingsfrucht steht: "Himbeere"
        } else if (lieblingsfrucht.equals("Banane")) {
            // gleichwertig zu: "Banane".equals(lieblingsfrucht)
            // in lieblingsfrucht steht: "Banane"
        } else  {
            // in lieblingsfrucht steht weder "Himbeere" noch "Banane"
        }
    }
}

MVP-Entwurf

  • einen Scanner erstellen
  • eine Frage stellen: z.B. “Wann wurde Java veröffentlicht?” (1995)
  • mit Scanner die Antwort einlesen
  • die gegebene Antwort mit der richtigen abgleichen
  • Wenn richtig, dann “Richtig!” ausgeben
  • Wenn falsch, dann “Falsch!” ausgeben

ausbauen

  • Wenn falsch, dann
    • “Falsch!” ausgeben
    • NEU: korrekte Antwort ausgeben
      • praktisch: zuvor korrekte Antwort in Variable speichern
  • mehrere Fragen stellen
  • Funktionen extrahieren
    • static void stelleFrage(String frage, String antwort, Scanner scanner)
  • optional: speichern, wie oft richtig und falsch
    • z.B. mit statischer Variable in der Programmklasse
  • weitere Erweiterungen: auf den nächsten Folien

Klassenmodell

  • zur Erweiterbarkeit, Austausch von Komponenten und bestimmen Funktionalitäten
  • Legende zum Diagram
    • kursiv: optional
    • unterstrichen: static
  • ladeFragen() füllt quizfragen
    • die Methode trägt in quizfragen mehrere Quizfrage-Objekte ein
    • siehe Stunde 11 mit ArrayLists: Beispielcode
    • nutzt dazu Konstruktor Quizfrage(String, String)
  • leiteQuiz() stellt alle Quizfragen
    • bekommt Frage mit Quizfrage.getFrage()
    • kontrolliert Antwort mit Quizfrage.stimmtAntwort()
  • main(String[] args) erstellt ein Quizmanager-Objekt und ruft die beiden Funktionen auf

optional

  • in der Stunde nicht geschafft
    • Zufall
    • Fragetypen

Zufall

  • Umsetzung mit Mischen von ArrayList<Quizfrage> quizfragen
  • Code-Beispiel: ArrayList mischen
import java.util.Random;
import java.util.Collections;
import java.util.ArrayList;
 
public class Mischen {
    public static void main(String[] args) {
        ArrayList<String> liste = new ArrayList<String>();
        liste.add("Birne");
        liste.add("Kokosnuss");
        liste.add("Wassermelone");
        liste.add("Erdbeere");
        
    System.out.println(liste);
        Collections.shuffle(liste, new Random());
    System.out.println(liste);
    }
}

Zufall umsetzen

  • mit Vererbung umsetzen
  • wir brauchen also eine Methode, die wir überschreiben können
  • wir überschreiben Quizmanager.ladeFragen()
    • zunächst wie in der superclass
    • d.h. super.ladeFragen()
    • danach: Durcheinandermischen von quizfragen
  • Quizprogramm muss also nur Quimanager gegen QuizmanagerZufall tauschen

Erweiterungsidee: Fragetypen

  • Quizfrage-Interface IQuizfrage
    • von Quizfrage implementiert
  • neue Fragetypen, als Klassen implements IQuizfrage:
    • Schätzfrage
    • ja/nein-Frage mit Antwort-Abkürzungen (j, ja, J, Ja, y, yes, …)
    • Multiple-Choice-Frage
    • … Kreative Ideen ✨

Kursmaterialien (Präsentationen, Beispiellösungen): https://trivo25.github.io/tud-java-course/