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 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 alleFreienSitzplaetze = new HashSet (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; } }