Hilfe Aufgabe mit 2D Arrays und Listen, kann mir jemand sagen wie ich es lösen soll?

coder_00

Mitglied
Ich muss eine kleine Anzeigetafe ausgeben lassen mit verschiedensten Sängern, Uhrzeiten, einer Saalnummer, ausgebucht (j/n) und ob das Konzert ausgebucht ist (wenn seatsLeft > 0, dann kann man noch Tickets kaufen). Der Kunde muss so lange gefragt werden, welches Konzert er besuchen möchte, bis er ein nicht ausgebuchtes Konzert auswählt oder abbricht ohne ein Ticket zu kaufen.
Am Anfang wird er auch gefragt wie viel Geld er hat, jedes Konzertticket kostet 20 Euro.

Wählte er einen nicht ausgebuchtes Konzert, wird er gefragt, wie viele Tickets er will. Hat er genügend Geld dafür UND sind noch genügend Plätze frei, bekommt er seine Tickets. Dabei werden das Geld was er bezahlt von seinem Geld abgezogen, und die freien Plätze für das jeweilige Konzert weniger.
Das wiederholt sich so lange, bis der Benutzer die Zahl 0 eingibt.

Jeder Kauf eines Nutzers reduziert die Anzahl verfügbarer Plätze für das Konzert entsprechend, und führt (falls keine Plätze mehr übrig sind) im Extremfall auch dazu, dass bei dem Film nun auch „ausgebucht“ steht..
Wenn der Besitzer die Konzert-Daten im Konzert-Array verändert (z.B. ein Konzert hinzufügt oder mehr Plätze in einem Saal zulässt), muss das Programm trotzdem funktionieren!

Ich hab das so irgendwie gemacht, aber da ist die Hälfte der Anforderungen nicht gelöst & bräuchte Hilfe, da ich total der Anfänger bin.
import java.util.ArrayList;
import java.util.Scanner;

public class Konzert {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int TicketsPrice = 15;
int tickets;
int seatsLeft1 = 2;
int seatsLeft2 = 2;
int seatsLeft3 = 0;



System.out.println("Wie viel Geld hast du dabei?");
int money = scanner.nextInt();
System.out.printf("Ich habe %d Euro dabei.", money);
System.out.println("");

String[][] screen = {{"Nr.", " Name ", " Uhrzeit", " Saal ", " Restplaetze"},
{"-----------------------------------------------"},
{"1.", " Sido ", " 20:15", " 1 ", " verfuegbar"},
{"2.", " Taylor Swift ", " 17:00 ", " 3 ", " verfuegbar"},
{"3.", " Selen ", " 22:00 ", " 2 ", " ausgebucht"},
{"------------------------------------------------"}};

for (int i = 0; i < screen.length; i++) {
for (int i1 = 0; i1 < screen.length; i1++) {
System.out.print(screen[i1]);
}
System.out.println();
}
System.out.println("Welchen (nicht ausgebuchten) Film moechtest du sehen? (0 zum abbrechen)");
int movie = scanner.nextInt();
if (movie > 0 && movie <= 3 && (seatsLeft1 + seatsLeft2 + seatsLeft3 > 0)) {
System.out.printf("Es sind noch 2 Tickets um jeweils %d Euro dafuer verfuegbar. Wie viele moechtest du kaufen?", TicketsPrice);
tickets = scanner.nextInt();
if ((money - (tickets * TicketsPrice) > 0)) {
System.out.printf("Du kaufst %d Tickets um %d Euro und hast jetzt noch " + (money - (tickets * TicketsPrice) + " Euro uebrig."), tickets, TicketsPrice, money, TicketsPrice);

}

ArrayList chosen = new ArrayList();
chosen.add(" Taylor Swift");
chosen.add(" Taylor Swift");
System.out.println("");
System.out.printf("Hier sind deine Tickets fuer die Konzerte %s.", chosen);
}
}
}
 

berndoa

Top Contributor
Na, überleg dir doch mal die Abläufe.
Kunde komt anfang an und will Konzert buchen, gegebenenfalls sagt er auch direkt gleich "Ich will ein Taylor Swift Konzert buchen".

Dann sollte ja mal zuallerst geklärt sein ob er sich überhaupt irgendein Konzert leisten kann.
Falls nicht, wird er gekickt.

Sagen wir nun, er hätte genug geld.

dann kommt dein vorgehen wie du es beschreibst:
eine schleife mit passender abbruchbedingung,
wo der kunde erst ein konzert nennt, dann dein programm stillschweigend prüft ob es nopch frei ist.
Falls ja, Alles fertig machen (mittels abbrichbedingung aus shcleife raus).

falls nein, zurück in nächste runde der shcleife.

Ansosnten würde ich grundsätzlich anders vorgehen von der klassenstruktur her:
Eine konzertklasse die alles zu einem bestimmten konzert speichert und wo nötig ausgeben kann.
dann eine konzertkauf Klase, wo du den eigentlich kaufvorgang durchführst. in der klasse dann folgendes:
erzeuge 3 konzert objekte.
beim erzeugen eines konzerts, mittels des konstruktors der konzertklasse, gibts du ein welche parameter (sänger, preis, ausgebucht,e tc. pp.) das konzert hat.


kurzum, bau erst mal ein grundgerüst bzw eine passende klasse für ein konzert bevor du mit bestimmten konzerten rumhantierst.

falls dir konstruktor, objekte und co, bzw. mein text an sich nicht viel sagt und du nicht weißt wovon ich überhaupt rede, dann vergiss es am besten wieder.

dann bist du vermutlich nocht nicht am punkt wo man eigene klassen mit konstruktoren, methoden "feldern" und co schreibt

Edit: Ach ja, natürlich auch da obligatorische "packe den code doch in code tags, im editor hier oben links spricjhwörtlich den ersten knopf mit dm </> symbol anklicken, code reinkopieren, fertig.

liest sich dann am ende viel besser.
 

berndoa

Top Contributor
Na, überleg dir doch mal die Abläufe.
Kunde komt anfang an und will Konzert buchen, gegebenenfalls sagt er auch direkt gleich "Ich will ein Taylor Swift Konzert buchen".

Dann sollte ja mal zuallerst geklärt sein ob er sich überhaupt irgendein Konzert leisten kann.
Falls nicht, wird er gekickt.

Sagen wir nun, er hätte genug geld.

dann kommt dein vorgehen wie du es beschreibst:
eine schleife mit passender abbruchbedingung,
wo der kunde erst ein konzert nennt, dann dein programm stillschweigend prüft ob es nopch frei ist.
Falls ja, Alles fertig machen (mittels abbrichbedingung aus shcleife raus).

falls nein, zurück in nächste runde der shcleife.

Ansosnten würde ich grundsätzlich anders vorgehen von der klassenstruktur her:
Eine konzertklasse die alles zu einem bestimmten konzert speichert und wo nötig ausgeben kann.
dann eine konzertkauf Klase, wo du den eigentlich kaufvorgang durchführst. in der klasse dann folgendes:
erzeuge 3 konzert objekte.
beim erzeugen eines konzerts, mittels des konstruktors der konzertklasse, gibts du ein welche parameter (sänger, preis, ausgebucht,e tc. pp.) das konzert hat.


kurzum, bau erst mal ein grundgerüst bzw eine passende klasse für ein konzert bevor du mit bestimmten konzerten rumhantierst.

falls dir konstruktor, objekte und co, bzw. mein text an sich nicht viel sagt und du nicht weißt wovon ich überhaupt rede, dann vergiss es am besten wieder.

dann bist du vermutlich nocht nicht am punkt wo man eigene klassen mit konstruktoren, methoden "feldern" und co schreibt

Edit: Ach ja, natürlich auch da obligatorische "packe den code doch in code tags, im editor hier oben links spricjhwörtlich den ersten knopf mit dm </> symbol anklicken, code reinkopieren, fertig.

liest sich dann am ende viel besser.
Noch ein paar Shcönheitsergänzungen:
man könnte beim Teil mit der Shcleife auch noch vorab eine Prüfung einbauen ob denn überhaupt noch Konzerte frei sind.
Weil bringt ja nix, wenn man den Kunden endlos Konzertnamen sagen lässt und nie zu einem Ende kommt wiel alle Konzerte shcon ausverkauft sind.

Gleichzeitig könnte man, wenn der Kunde ein konzert nennt welches Ausverkauft ist, eine Art Ansage kommen lassen a la "Dieses Konzert ist leider ausverkauft. Aber es sind noch die Konzerte A,B,C frei"
Also dem Kunden mitteilen was frei ist.
Sollten der Kunde dann trotzdem wieder was nicht-freies nennen, dann den Kunden kicken denn er ist offenbar zu blöd zum Zuhören :)
Auch den Kunden kicken wenn er immer wieder die selben (ausverkauften) konzertnamen nennt, dnen dann kommt die Shcleife auch nie zu Ende.

Aber das sind jetzt mehr so Sachen, wie man das verbessern könnte im praktischen Sinne.
Das geht vermutlich über das hinaus, was die Aufgabe erwartet.
 

Neue Themen


Oben