Während Ihr darauf wartet, dass es beginnt..
Java
Objektorientierte Programmierung
Florian Kluge, Moritz Schulz
- Januar 2022
Florian.Kluge@mailbox.tu-dresden.de
Moritz.Schulz2@mailbox.tu-dresden.de
Was wir heute machen
Projekt, Teil 1/2: Quizanwendung
- Projektidee
- Vorgehensweise
- (Wiederholung) Eingaben einlesen
- Strings vergleichen
- Prototyp basteln
- schritteweises Ausbauen
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
- 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/