Schnittstelle Theatre

bRainLaG

Mitglied
Ich soll eine Klasse (Theatre) schreiben, wo die Belegung mit einer toString-Methode ausgegeben wird. Die Belegung soll wie unten auflistet aussehen

1 2 3 4 5 6 7 8

a - - - - - - - -

b - x x x - - x x

c - - - - - - - -

d - x x x x x x x

e - - - - - - - -

Gegeben habe ich dafür noch die Schnittstelle Reservable:

Code:
public interface Reservable {
	
	boolean cancel(char row, int seatFrom, int seatTo);
	
	char getMaxRow();
	
	int getMaxSeat();
	
	boolean reserve(char row, int seatFrom, int seatTo);

}

Ich habe nun schon eine Weile überall nachgelesen allerdings finde ich keinen Ansatz wie ich an diese Aufgabe heran gehen kann, ich hoffe jemand kann mir vieleicht erklären wie ich da ran gehen müsste.
 
Woran hakt es denn? Wie lange machst du schon Java?

Du mußt mit einer Klasse einfach nur das Interface und die Methode implementieren.

Für die Markierungen kannst du z.B. ein zweidimensionale boolean array verwenden, wo du mittels reserve true und mit cancel false einträgst. Ein char zurückzugeben halte ich zwar für ne blöde Idee aber nun gut. Wenns so sein soll...
 
Hallo,

eine Idee wäre, dass du eine Map hast, in der du die Belegung speicherst. Als key nimmst du die Bezeichnung der Reihe und als Value nimmst du ein boolean-Array.

Das kannst du dann leicht befüllen und abfragen.

Aus dieser Map, kannst du dann auch leicht einen String erzeugen der die Belegung anzeigt.

Gruß

Sascha
 
naja ungefähr da hing es ich programmier schon etwas Java allerdings hab ich die Sache mit Schnittstellen erst jetzt.

Bzw hat sich mir nicht ganz erschlossen wie ich diese Grafik ausgegeben kriege.
Werds mal mit dem Array versuchen denke ich.
 
Ich habe nunmal angefangen ein zwei dimensionales Array zu deklarieren:

boolean [][] Theatre = new boolean [6][9];

Somit ergeben sich daraus 6 Zeilen 9 Spalten.

Ich habe nun aber das Problem, das ich zumindest die 0-ten Felder und die Felder der obersten Zeile nicht mit boolean belegen will, sondern mit a,b,c.... und 0,1,2,3,4.....

Mit der normalen Deklaration die ich kenne, ist dies nicht möglich das man:

Theatre[0][0] = 0;

macht, abgesehen davon das in meinem Array so wie ich es anfangs deklariert habe ohnehin nur boolean Werte stehen dürften, hat jemand ne Ahnung wie ich das anpassen kann, hab mit mehrdimensionalen Arrays noch nicht so die große Erfahrung deswegen.
 
Warum möchtest du das denn machen?

Bei den Spalten hast du doch den Index als Zahl. Er fängt zwar bei 0 an, aber wenn du +1 rechnest, hast du immer die aktuelle Zahl zum ausgeben.

Bei den Reihen musst du halt statt der Zahl den Buchstaben schreiben.

Also du deklarierst dein Array als new boolean[5][8], statt mit 6 und 9.
Das Array ist ja schließlich nur dazu da, um die Belegung der Plätze zu speichern und nicht um die Benennung zu speichern.

Gruß

Sascha
 
Hi!

In das Array gehören NUR die Daten. Die Beschriftung ist erstmal völlig nebensächlich!

In deinem Array steht dann in der ersten Zeile die Belegung der ersten Sitzreihe usw.

Versuch vielleicht erst mal deine Ausgabe ohne Beschriftung zu verwirklichen. Wenn das klappt, kannst du recht einfach die Beschriftung hinzufügen :)
 
Das mit dem Array klappt eigentlich ganz gut, mit was ich überhaupt nicht klar komme, sind allerdings die operationen die ich noch implementieren muss,
einerseits erschließt sich mir halt nicht wie ich da die reihe ja mit nem char angegeben werden muss, dieses bei einem mehrdimensionalen array hinbekommen soll, was eigentlich mein Hauptproblem momentan ist.
Theoretisch würde ich die sitze die reserviert/gecancelt werden über den index des Arrays halt steuern, damit ich den integer wert habe, das mit char erschließt sich mir allerdings überhaupt nicht.

public class Theatre implements Reservable {

Code:
int [] seats = new int [9];
boolean [][] theatre = new boolean [5][8];
	

	@Override
	public boolean cancel(char row, int seatFrom, int seatTo) {	
		return false;
	}

	@Override
	public char getMaxRow() {
		int reihen = theatre[0].length;
		return reihen;
	}

	@Override
	public int getMaxSeat() {
		int sitz = theatre.length;
		return sitz;
		
	}

	@Override
	public boolean reserve(char row, int seatFrom, int seatTo) {
		return true;
	}
 
Ein char ist letztendlich auch nur ein int. Wenn du unter http://www.asciitable.com/ nachschaust, hat ein klein a den Wert 97. Du kannst char auf ein int casten und immer 97 abziehen um die Position im Array zu bekommen.

Machst dir am besten ne kleine Methode für. Umgekehrt mußt du bei getMaxRow eben die Länge des Arrays plus 97 zurückgeben und auf char casten.

Übrigens benutzt du das Array falschrum. Das äußere sind die Reihen und das innere die Sitze.
 
Zurück