6.3 Skyline teilaufgabe b)

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

6.3 Skyline teilaufgabe b)
Grüßt euch leute.

Ich habe ein verständnisproblem bei der 6.3 b)

es heisst ja [quote]
Implementieren Sie nun die Methode divide, der eine Reihung von Gebäuden übergeben
wird (orig). Jedes Gebäude in orig ist definiert durch eine int-Reihung mit drei Einträgen,
L, H, und R (linke Koordinate, Höhe, rechte Koordinate, siehe 5-44).
Im Fall isLeft soll die Methode die ersten numBuildings in einer neuen Reihung zurückgeben,
ansonsten die restlichen Gebäude.
[/quote]

jedoch frage ich mich wie die neue reihung aussschauen soll… die folienangabe (s.44) scheint auch nicht richtig zu sein.

soll die neue reihung wie auf folie 5-47

ausschauen oder wie ist das gemeint?

Ich danke euch für euer bevorstehendes bemühen :slight_smile:


Bei mir sehen die Testergebnisse in der [m]main[/m] so aus:

[[1, 11, 5]]
[[2, 6, 7], [3, 13, 19]]
[[1, 11, 5], [2, 6, 7]]
[[14, 3, 25], [19, 18, 22], [23, 13, 29], [24, 4, 28]]

Du kriegst [m]int[][3][/m] rein, und spuckst [m]int[][3][/m] wieder aus.


Wenn du dir den Rückgabetyp der Methode anschaust, dann ist klar, dass (1,11,3,13,…,29,0) falsch ist, denn wir erwarten ein zwei-dim-array.
Ein Beispiel:

int[][] a = { {1,11,5}, {2,6,7}, {3,13,19} };
int[][] result = divide(a, 2, true};

Jetzt würde dein result so ausschauen: result = { {1,11,5}, {2,6,7} }

Ist im Grunde das Beispiel von AnNyan (aus der Main).


Okay, scheint ja wirklich nur ein verstaendnisproblem gewesen zu sei, an sich ja nicht wirklich schwer die teilaufgabe b) :slight_smile:
Danke!


Ich klinke mich hier mal ein…

@AnNyan
(und natürlich auch alle Anderen)

Wie sieht denn die Ausgabe deiner/eurer main-Methode im Gesamten aus?

Ich erhalte das hier:

21
[1, 11, 3, 13, 10, 0]
[[1, 11, 5]]
[[2, 6, 7], [3, 13, 19]]
[[1, 11, 5], [2, 6, 7]]
[[14, 3, 25], [19, 18, 22], [23, 13, 29], [24, 4, 28]]
[1, 11, 3, 13, 9, 0, 12, 7, 16, 3, 19, 18, 22, 3, 23, 13, 29, 0]
28

Soweit ich das überblicken kann, müsste meine Lösung stimmen, allerdings meckert EST. Habe die gegebene Skyline auf Papier gezeichnet und sie stimmt mit der Lösung meines Algorithmus überein. Folglich kann es eigentlich nur noch an der area-Methode liegen. Was kommt denn da bei euch so raus?


189
[1, 11, 3, 13, 10, 0]
[[1, 11, 5], [2, 6, 7]]
[[2, 6, 7], [3, 13, 19]]
[[1, 11, 5], [2, 6, 7]]
[[14, 3, 25], [19, 18, 22], [23, 13, 29], [24, 4, 28]]
[1, 11, 3, 13, 9, 0, 12, 7, 16, 3, 19, 18, 22, 3, 23, 13, 29, 0]
272

Meine Area-Werte wurde auch in einem anderen Thread gepostet. Die divide Methode unterscheidet sich allerdings.

divide(new int[][] { {1,11,5}, {2,6,7}, {3,13,19} }, 2, true)

Die ersten numBuildings (also die ersten zwei). Behaupte mal, dass meine Ausgabe also stimmt.


Da hast du recht, wenn du deinen Methodenaufruf ausführst kommt dein Ergebnis raus. Allerdings steht bei mir in der main folgenden:

System.out.println(Arrays.deepToString(divide(new int[][] { {1,11,5}, {2,6,7}, {3,13,19} }, 1, true)));

Dafür stimmt mein Aufruf. Gab es eine Änderung in der Angabe? Ich kann mich nicht entsinnen, etwas geändert zu haben o.0


Hast natürlich recht!
Da hab ich beim Spielen vergessen die Werte zurückzusetzen. My bad.

Dann dürfte deine Ausgabe korrekt sein, bis auf area, aber das hast du ja selbst schon vermutet.


Schon wieder die Angabe falsch gelesen… Jetzt macht das ganze auch Sinn. Ich habe nicht die Fläche der Skyline berechnet, sondern area frei als Gebiet übersetzt. Danke dir, jetzt stimmen die given testcases :wink:


Also ich bekomm das heraus:
189
[1, 11, 3, 13, 10, 0]
[[0, 0, 0]]
[[0, 0, 0], [0, 0, 0]]
[[0, 0, 0], [0, 0, 0]]
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
null

Wie bekomm ich denn die Werte von orig da rein wo jetzt die Nullen stehen?


Du scheinst deine Methoden falsch implementiert zu haben. Was da jetzt im Detail nicht stimmt, ist natürlich schwer zu sagen ohne den Code zu sehen.


Vielleicht ein bisschen spät dafür, aber was solls.
Verstehe ich das so richtig? : |
v
Man hat bspw. ein Array [1,2,3,4,5,6,7,8,9,10,11], was in orig[][x] gespeichert wird, gegeben und man in Gebäude unterteilen soll. Falls isLeft stimmt, soll man das Array in numBuildings unterteilen und diese zurückgeben. Wenn numBuildings hier z.B. 2 wäre, würden die Gebäude [1,2,3] und [4,5,6] zurückgegeben werden!?

Falls das so stimmt, sollen die Gebäude dann in dem 2d Array ret, in den Spalten gespeichert werden?


Ich versteh leider nicht ganz dein Problem, aber ein bisschen was scheinst du falsch verstanden zu haben.

orig
 [/code] könnte beispielsweise so aussehen: [code]
{ {1,11,5}, {2,6,7}, {3,13,19  }

Und wenn du jetzt sagst, numbuildings = 2 und left = true dann bekommst du folgendes zurück:

{ {1,11,5},{2,6,7} }

Ansonsten schau dir mal die gegebene Main und ihre Beispiele an. Vergleichswerte findest du hier im Thread ja genug.


ok was ich mich die ganze zeit frage, wie könnt ihr für die teilaufgaben alle 3 Felder im Array ausgeben ohne das Merge wegen Outofbounds knallt?

effektiv darf ich merge ja nur noch 2 werte pro objekt im array übergeben, brauche aber wohl 3 für die teilaufgaben?