Mehrdimensionale Arrays

Fynn

Mitglied
Hallo ich bin totaler Jüngling in Java und habe heute mit mehrdimensionalen Arrays begonnen ich habe die Aufgabe ein Reservierungsprogramm zu schreiben, die lautet:



1. The cinema hall consists of 3 blocks (A, B, C).
2. Each block consists of 4 rows with 10 seats each.
3. People can choose a block, specify the row and then several Reserve seats in this row.
4. The reservation is only successful if the places are not already taken and the Places also exist (formerly Block A row 2 places 2 - 5 exist; Block A row 4 Places 8-11 do not exist; Block D does not exist, etc.).
5. If the reservation was successful, this should be communicated to the software become.


Kann mir jemand tipps geben und Ansätze wie ich mich an so eine Aufgabe hingeben kann? Um selber auf die Lösung zu kommen? Das Problem ist manchmal das ich wirklich gar keine Ahnung habe wo ich jetzt anfangen soll, wie das ganze überhaupt auschauen soll. Danke für jeden Tipp und Hinweis an Vorangehenweisen!
 

httpdigest

Top Contributor
Naja, es gibt drei Dimensionen:
1. Blöcke
2. Reihen
3. Sitze
Es gibt also insgesamt: `3 Blöcke` x `4 Reihen` x `10 Sitze` Plätze im Kinosaal.
Zusätzlich dazu besteht ein Platz eigentlich nur aus der booleschen Information "reserviert oder nicht reserviert".
Also könnte man das Ganze mit einem dreidimensionalen boolean-Array lösen.
 
X

Xyz1

Gast
Das ist auch nicht ganz trivial
Java:
class Kino {
	int ticketnr = 1;
	int[][][] blocks = new int[3][4][10];

	boolean reserveSeats(int n, int block) {
		int mid = 4 - (n / 2);
		for (int i = 0; mid - i >= 0 || mid + i < 10; i++) {
			if (mid - i >= 0 && reserveSeats(n, block, mid - i)) {
				return true;
			}
			if (mid + i < 10 && reserveSeats(n, block, mid + i)) {
				return true;
			}
		}
		return false;
	}

	boolean reserveSeats(int n, int block, int mid) {
		a: for (int i = 0; i < 4; i++) {
			for (int j = 0; j < n; j++) {
				if (mid + j == 10 || blocks[block][i][mid + j] != 0) {
					continue a;
				}
			}
			for (int j = 0; j < n; j++) {
				blocks[block][i][mid + j] = ticketnr;
				ticketnr++;
			}
			return true;
		}
		return false;
	}

	@Override
	public String toString() {
		String s = "";
		for (int i = 0; i < blocks.length; i++) {
			for (int j = 0; j < blocks[i].length; j++) {
				for (int j2 = 0; j2 < blocks[i][j].length; j2++) {
					s += String.format("%02d ", blocks[i][j][j2]);
				}
				s += "\n";
			}
			s += "\n";
		}
		return s;
	}
}

Code:
		Kino kino = new Kino();
		kino.reserveSeats(1, 0);
		kino.reserveSeats(1, 1);
		kino.reserveSeats(1, 2);
		while (kino.reserveSeats(1, 1));
		System.out.println(kino);

Code:
00 00 00 00 01 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 

31 23 15 07 02 11 19 27 35 39 
32 24 16 08 04 12 20 28 36 40 
33 25 17 09 05 13 21 29 37 41 
34 26 18 10 06 14 22 30 38 42 

00 00 00 00 03 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00

/e Typische Sitzverteilung, ein teurer Platz, ein Platz vorn und viele in der Mitte.
 

Fynn

Mitglied
boolean reserveSeats(int n, int block, int mid) { a: for (int i = 0; i < 4; i++) { for (int j = 0; j < n; j++) { if (mid + j == 10 || blocks[block][mid + j] != 0) { continue a; } }
ich verstehe nicht ganz was die variable a: macht das hab ich bis jetzt gar nicht gesehen in Java. Was macht das genau und was ist das für eine Schreibmethode?
 
K

kneitzel

Gast
Das a ist keine Variable sondern ein Label. Damit bezieht sich das continue auf die äußere Schleife und nicht auf die innere.

Man sollte es evtl. kennen, aber schau es Dir nicht erst im Detail an. Das ist eine absolute Unart und ich habe bisher auch nur eine einzige Person gesehen, die das scheinbar gut findet.
 

Fynn

Mitglied
Das a ist keine Variable sondern ein Label. Damit bezieht sich das continue auf die äußere Schleife und nicht auf die innere.

Man sollte es evtl. kennen, aber schau es Dir nicht erst im Detail an. Das ist eine absolute Unart und ich habe bisher auch nur eine einzige Person gesehen, die das scheinbar gut findet.
Okay danke!
 
X

Xyz1

Gast
Ja, ich wollte nicht auch noch eine 3. Methode aufstellen.

@temi Diese Aufgabe ist nicht ganz trivial. Wenn er sie nicht versteht, ist über eine leichtere nachzudenken. Nur weil ich das kann heißt das nicht dass auch andere das können.

Dennoch ist Deine Nachfrage natürlich alles andere als schön. Ggf mal den Ton überdenken.
 

httpdigest

Top Contributor
Diese Aufgabe ist nicht ganz trivial.
Das hängt meiner Meinung nach davon ab, wie man diesen (grammatikalisch nicht korrekten) Satz:
3. People can choose a block, specify the row and then several Reserve seats in this row.
interpretiert.
Meiner Meinung nach ist die zu implementierende Schnittstelle lediglich:
Java:
public boolean reserve(int block, int row, int fromSeat, int toSeat) {...}
 

temi

Top Contributor
1. The cinema hall consists of 3 blocks (A, B, C).
2. Each block consists of 4 rows with 10 seats each.
3. People can choose a block, specify the row and then several Reserve seats in this row.
4. The reservation is only successful if the places are not already taken and the Places also exist (formerly Block A row 2 places 2 - 5 exist; Block A row 4 Places 8-11 do not exist; Block D does not exist, etc.).
5. If the reservation was successful, this should be communicated to the software become.


Kann mir jemand tipps geben und Ansätze wie ich mich an so eine Aufgabe hingeben kann?

Die ersten beiden Punkte beschreiben die Größe des erforderlichen Arrays. 3 x 4 x 10. Ich würde der Einfachheit halber erst mal ein boolean-Array nehmen (false = Sitz ist frei, true = Sitz ist belegt).

Der dritte Punkt beschreibt im Prinzip die Methodenparameter: block, row, fromSeat, toSeat => reserve(int block, int row, int fromSeat, int toSeat).

Der vierte Punkt sagt aus, dass der Wert für block im Bereich von 1 - 3 sein darf, row im Bereich 1 - 4, fromSeat und toSeat im Bereich von 1 - 10.

Der fünfte Punkt sagt, dass die Methode den Erfolg zurückgeben soll, also boolean reserve(...)

Damit kannst du jetzt eine Klasse schreiben mit dem Array als Instanzvariable und der Methode.

In der Methode würde ich als erstes die Gültigkeit der Parameter prüfen. Damit es übersichtlicher wird evtl. aufgeteilt:

- Wenn block kleiner als 1 oder größer als 3, dann beende die Methode mit false.
- Wenn reihe kleiner als 1 oder größer als 4, dann beende die Methode mit false.
- usw.

Als nächstes musst du prüfen, ob die gewünschten Sitze in block/reihe noch frei sind. Dazu musst du in einer Schleife die Sitze im entsprechenden block/reihe durchgehen. Sobald einer belegt ist, kannst du die Methode mit false verlassen.

Wenn du bis hier gekommen bist, dann sind alle Parameter gültig und die gewünschten Sitze sind frei. Du brauchst jetzt noch eine Schleife über die gewünschten Sitze, um sie im Array auf "true" zu setzen (= belegt).

Danach kannst du die Methode mit "true" verlassen, die Reservierung ist erfolgt.
 
Zuletzt bearbeitet:
X

Xyz1

Gast
Ok, dann nimmt mein Code eine "Platzierung" vor die eigentlich nicht gefordert war.
Dann entschuldigt bitte & der @Fynn kann die von euch aufgezeigte Methode einfach "umsetzen". :)
 

Fynn

Mitglied
Die ersten beiden Punkte beschreiben die Größe des erforderlichen Arrays. 3 x 4 x 10. Ich würde der Einfachheit halber erst mal ein boolean-Array nehmen (false = Sitz ist frei, true = Sitz ist belegt).

Der dritte Punkt beschreibt im Prinzip die Methodenparameter: block, row, fromSeat, toSeat => reserve(int block, int row, int fromSeat, int toSeat).

Der vierte Punkt sagt aus, dass der Wert für block im Bereich von 1 - 3 sein darf, row im Bereich 1 - 4, fromSeat und toSeat im Bereich von 1 - 10.

Der fünfte Punkt sagt, dass die Methode den Erfolg zurückgeben soll, also boolean reserve(...)

Damit kannst du jetzt eine Klasse schreiben mit dem Array als Instanzvariable und der Methode.

In der Methode würde ich als erstes die Gültigkeit der Parameter prüfen. Damit es übersichtlicher wird evtl. aufgeteilt:

- Wenn block kleiner als 1 oder größer als 3, dann beende die Methode mit false.
- Wenn reihe kleiner als 1 oder größer als 4, dann beende die Methode mit false.
- usw.

Als nächstes musst du prüfen, ob die gewünschten Sitze in block/reihe noch frei sind. Dazu musst du in einer Schleife die Sitze im entsprechenden block/reihe durchgehen. Sobald einer belegt ist, kannst du die Methode mit false verlassen.

Wenn du bis hier gekommen bist, dann sind alle Parameter gültig und die gewünschten Sitze sind frei. Du brauchst jetzt noch eine Schleife über die gewünschten Sitze, um sie im Array auf "true" zu setzen (= belegt).

Danach kannst du die Methode mit "true" verlassen, die Reservierung ist erfolgt.
Danke für Anleitung!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N mehrdimensionale arrays Java Basics - Anfänger-Themen 12
J Mehrdimensionale Arrays Java Basics - Anfänger-Themen 2
melaniemueller Lagerverwaltung erstellen - mehrdimensionale Arrays Java Basics - Anfänger-Themen 62
J Methoden Mehrdimensionale Arrays übereinander legen Java Basics - Anfänger-Themen 5
G Mehrdimensionale Arrays Java Basics - Anfänger-Themen 17
T Mehrdimensionale Arrays mit geschachtelter for-Schleife initialisieren Java Basics - Anfänger-Themen 14
L mehrdimensionale arrays ich verzweifle so langsam... Java Basics - Anfänger-Themen 9
C Mehrdimensionale Arrays in Java langsam? Java Basics - Anfänger-Themen 8
D Mehrdimensionale Arrays Sortieren Java Basics - Anfänger-Themen 5
T Mehrdimensionale Arrays Java Basics - Anfänger-Themen 4
B mehrdimensionale arrays Java Basics - Anfänger-Themen 4
B mehrdimensionale Arrays Java Basics - Anfänger-Themen 5
J eclipse, mehrdimensionale arrays, hilfsmethoden Java Basics - Anfänger-Themen 3
S arraycopy für mehrdimensionale Arrays? Java Basics - Anfänger-Themen 8
B Mehrdimensionale Arrays Java Basics - Anfänger-Themen 4
T mehrdimensionale arrays Java Basics - Anfänger-Themen 8
H Mehrdimensionale Arrays vergleichen Java Basics - Anfänger-Themen 6
G Zwei mehrdimensionale Arrays multiplizieren Java Basics - Anfänger-Themen 9
J Mehrdimensionale Arrays inhaltlich vergleichen. Java Basics - Anfänger-Themen 3
D mehrdimensionale nicht-rechteckige Arrays Java Basics - Anfänger-Themen 2
T Mehrdimensionale Array Java Basics - Anfänger-Themen 2
putinator Mehrdimensionale Array addieren Java Basics - Anfänger-Themen 10
D 2 mehrdimensionale Matrix einlesen Java Basics - Anfänger-Themen 2
T .add(E) für mehrdimensionale Vectoren Java Basics - Anfänger-Themen 5
H mehrdimensionale Datenstruktur erfassen Java Basics - Anfänger-Themen 10
L Mehrdimensionale Array Java Basics - Anfänger-Themen 4
A Mehrdimensionale Felder Java Basics - Anfänger-Themen 18
D Mehrdimensionale ArrayList - Zugriff über return Java Basics - Anfänger-Themen 2
B Mehrdimensionale Array Problem Java Basics - Anfänger-Themen 12
J Mehrdimensionale Liste erstellen ohne Array Java Basics - Anfänger-Themen 14
V Mehrdimensionale Collection? Java Basics - Anfänger-Themen 4
J Mehrdimensionale Array kopieren Java Basics - Anfänger-Themen 6
G Mehrdimensionale ArrayList erstellen Java Basics - Anfänger-Themen 7
D mehrdimensionale ArrayList ? Java Basics - Anfänger-Themen 14
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste und Arrays Java Basics - Anfänger-Themen 12
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
S Hilfe bei Praktischen Aufgaben von Arrays Java Basics - Anfänger-Themen 39
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
M Arrays Java Basics - Anfänger-Themen 3
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
Ostkreuz Summieren von Arrays Java Basics - Anfänger-Themen 4
javaBoon86 Arrays 2 Dimension Werte ausgeben Java Basics - Anfänger-Themen 15
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
D Arrays an replaceAll-Methode übergeben Java Basics - Anfänger-Themen 12
rosima26 Geordnete Arrays ausgeben Java Basics - Anfänger-Themen 31
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
C Zwei Arrays addieren und ausgeben Java Basics - Anfänger-Themen 3
E Zinsrechnung mithilfe von Arrays Java Basics - Anfänger-Themen 12
LePetitChat1 Arrays - NullPointerException? Java Basics - Anfänger-Themen 14
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
H Arrays befüllen Java Basics - Anfänger-Themen 43
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
D Arrays Java Basics - Anfänger-Themen 9
C Java Arrays - Ausgabe in Methode Java Basics - Anfänger-Themen 12
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
N Arrays Java Basics - Anfänger-Themen 5
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
U zwei 2D arrays auf gleich sein überprüfen Java Basics - Anfänger-Themen 14
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
A Arrays aufsummieren Java Basics - Anfänger-Themen 11
C Wie 2 Arrays zusammenfügen und sortieren? Java Basics - Anfänger-Themen 11
S Arrays aneinanderketten Java Basics - Anfänger-Themen 20
Sinan Arrays auflisten ohne Wiederholung Java Basics - Anfänger-Themen 28
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
R Werte und Reihenfolge in 2d Arrays vergleichen Java Basics - Anfänger-Themen 5
D Verschlüsslungsaufgabe / Arrays Java Basics - Anfänger-Themen 6
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
L Methode zum invertieren eines Arrays Java Basics - Anfänger-Themen 7
S zweidimensionale char arrays Java Basics - Anfänger-Themen 14
D Verwirrung bei Streams aus primitiven Arrays Java Basics - Anfänger-Themen 2
P Arrays mit verschiedenen Längen miteinander dividieren. Java Basics - Anfänger-Themen 1
P Wie kann ich die Zahlen dieses Arrays dividieren? Java Basics - Anfänger-Themen 2
N 2D Arrays jedes xy vergleichen Java Basics - Anfänger-Themen 7
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
Kawastori Größe eines Arrays bestimmen Java Basics - Anfänger-Themen 13
Zeppi Arrays[i] Java Basics - Anfänger-Themen 7
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
J B-Sprache mit Arrays ausführen Java Basics - Anfänger-Themen 18
A Teilarrays eines 2D-Arrays sortieren Java Basics - Anfänger-Themen 4
C Arrays - deklarieren, initialisieren? Ist das ein Objekt? Java Basics - Anfänger-Themen 3
K Sudoku mit 2D Arrays Java Basics - Anfänger-Themen 19
T Vertikales Histogramm mit Arrays Java Basics - Anfänger-Themen 3
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
F Arrays: Mathematische Funktion Java Basics - Anfänger-Themen 19
mihe7 Von Datentypen und (mehrdimensionalen) Arrays Java Basics - Anfänger-Themen 4
A Teilen eines Arrays Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben