kino/src/gfn/marc/version2/Main_v2.java

140 lines
4.8 KiB
Java

package gfn.marc.version2;
/*
Version 2: ArrayLists
*/
import gfn.marc.Sitzplatz;
import java.util.*;
public class Main_v2 {
// VORBEREITUNG
// ArrayList für Sitzplan erstellen
static ArrayList<Sitzplatz> sitzplan = new ArrayList<>(210);
public static void main(String[] args) {
// Sitzplan-ArrayList füllen
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 30; j++) {
sitzplan.add(new Sitzplatz(((i + 1) * 100 + (j + 1)), false));
}
}
// Hilfs-HashSet für freie Plätze (wie in der Vorgabe)
HashSet<Integer> alleFreienSitzplaetze = new HashSet<Integer>
(Arrays.asList(102, 203, 204, 207, 208, 209, 303, 304, 305, 306, 307, 308));
// Freie Plätze in Sitzplan-Array eintragen
for (Sitzplatz sitzplatz : sitzplan) {
if (alleFreienSitzplaetze.contains(sitzplatz.getNummer())) {
sitzplatz.setStatus(true);
}
}
// LÖSUNG
// Gewünschte Sitzplatzanzahl eingeben
boolean reservierung = true;
Scanner eingabe = new Scanner(System.in);
int anzahlSitze = 0;
System.out.println("Bitte geben Sie die gewünschte Anzahl von Sitzplätzen ein! (1 - 30)");
// Eingabe überprüfen
while (true) {
try {
anzahlSitze = eingabe.nextInt();
if (anzahlSitze < 1 || anzahlSitze > 30) {
System.err.println("Die eingegebene Zahl ist ungültig!");
System.err.println("Bitte geben Sie eine Zahl zwischen 1 und 30 ein.");
} else {
break;
}
} catch (InputMismatchException ime) {
System.err.println("Bitte geben Sie eine Zahl ein!");
eingabe.next();
}
}
// Freie Sitzplätze mit der Methode freieSitze() ermitteln
int freierSitzplatz = freieSitze(anzahlSitze);
// Ausgabe der Nummern der freien Sitzplätze
if (freierSitzplatz != 0 && anzahlSitze > 1) {
System.out.print("Folgende Sitzplätze können für Sie reserviert werden: ");
for (int i = 0; i < anzahlSitze; i++) {
if (i < anzahlSitze - 1) {
System.out.print(freierSitzplatz + i + ", ");
} else {
System.out.print(freierSitzplatz + i);
}
}
System.out.println();
} else if (freierSitzplatz != 0) {
System.out.println("Folgender Sitzplatz kann für Sie reserviert werden: " + freierSitzplatz);
// Falls gewünschte Anzahl von freien Sitzplätzen nicht vorhanden
} else {
System.out.println(anzahlSitze > 1 ? "Leider konnten wir für Sie nicht die gewünschte Anzahl freier " +
"Sitzplätze reservieren." : "Leider haben wir derzeit keinen freien Sitzplatz.");
reservierung = false;
}
// Abfrage "Möchten Sie reservieren?" mit Überprüfung der Eingabe
while (reservierung) {
System.out.println("Möchten Sie reservieren? (j/n)");
String auswahl = eingabe.next().trim().toLowerCase();
// Wenn ja ("j")
if (auswahl.matches("j")) {
for (int i = 0; i < anzahlSitze; i++) {
for (Sitzplatz sitzplatz : sitzplan) {
if (freierSitzplatz + i == sitzplatz.getNummer()) {
sitzplatz.setStatus(false);
}
}
}
System.out.println(anzahlSitze > 1 ? "Die Sitzplätze wurden für Sie reserviert!" :
"Der Sitzplatz wurde für Sie reserviert!");
reservierung = false;
// Wenn nein ("n")
} else if (auswahl.matches("n")) {
reservierung = false;
// Wenn Eingabe ungültig
} else {
System.err.println("Eingabe ungültig!");
}
}
System.out.println("Vielen Dannk für Ihren Besuch und auf Wiedersehen!");
// OpÜbrige freie Sitzplätze
System.out.println("\nÜbrige freie Sitzplätze: ");
for (Sitzplatz sitzplatz : sitzplan) {
if (sitzplatz.isStatus()) {
System.out.print(sitzplatz.getNummer() + " ");
}
}
System.out.println();
}
static int freieSitze(int anzahlSitze) {
int zaehler = 0;
for (int i = 0; i < sitzplan.size(); i++) {
zaehler = sitzplan.get(i).isStatus() ? zaehler + 1 : 0;
if (zaehler == anzahlSitze) {
return sitzplan.get(i - (zaehler - 1)).getNummer();
}
}
return 0;
}
}