Worin besteht der Sinn und Anwendungsbereich von Dreidimensionalen Arrays?

In einer Schachtel sind Schnellhefter drinnen wo Zettel mit Zeilen und Spalten drinnen sind
1 2 3 4 5 dimensional

Aber grundsätzlich würd ich sowas anders abbilden...
 
Arrays bieten die Möglichkeit, Werte anstelle von normalen Variablennamen über Indizes/Koordinaten zu benennen. Ob dem tatsächlich eine dreidimensionale Struktur zugrunde liegt wie vielleicht bei Punkten im Raum oder Containern auf einem Frachter oder ob es einfach ein verschachteltes Referenzierungssystem gibt (Die Welt hat eine Liste von Staaten, jeder Staat eine Liste von Orten, jeder Ort eine Liste von Straßen, jede Straße ein Liste von Hausnummern, jede Hausnummer eine Liste von Etagen, jede Etage eine Liste von Wohnungen).

Das Initialisieren kann natürlich schnell viel Schreibarbeit werden...

Java:
// der Inhalt von Kartons, die 5 x 5 x 5 auf einer Palette gestapelt sind
String[][][] inhalt = new String[5][5][5];

// Inhalt von Kartons auf einer 3 x 3 x 3-Palette
String[][][] nochEinInhalt = new String[][][] {
   // erste Lage
   {
      {"Dosen", "Brot", "Bier"}, // erste Reihe
      {"Hosen", "Rot", "Tier"}, // zweite Reihe
      {"Rosen", "Lot", "Zier"} // dritte Reihe
   },
   // zweite Lage
   {
      {"Hasen", "Reis", "Kaffee"}, // erste Reihe
      {"Nasen", "Mais", "Toffee"}, // zweite Reihe
      {"Rasen", "Gneiss", "Affe"} // dritte Reihe
   },
   // dritte Lage
   {
      {"Kiwi", "Monitor", "Glas"}, // erste Reihe
      {"Zivi", "Garagentor", "Gras"}, // zweite Reihe
      {"HiWi", "Skeletor", "Spaß"} // dritte Reihe
   }
};
 
Oder (für den eher visuellen Lerntyp) Zauberwürfel ? Wikipedia

Java:
int[][][] wuerfel = new int[3][3][3];

 System.out.println(wuerfel[1][1][1]; // wäre die Mitte, beim Rubik’s Cube eigentlich das Gelenk

// alle 8 Ecken:
 System.out.println(wuerfel[0][0][0]);
 System.out.println(wuerfel[2][0][0]);
 System.out.println(wuerfel[0][2][0]);
 System.out.println(wuerfel[2][2][0]);
 System.out.println(wuerfel[0][0][2]);
 System.out.println(wuerfel[2][0][2]);
 System.out.println(wuerfel[0][2][2]);
 System.out.println(wuerfel[2][2][2]);
 
Zuletzt bearbeitet:
Oder um es mit den Worten meine Geometrie-Professors zu sagen: "wir leben nicht in einer 3dimensionalen Welt, sondern in einer n-dimensiponalen." Soll heißen: du kannst dir zu jeder xyz-Koordinate im Raum z.B. einen Druck, eine Temperatur oder was weiß ich sonst noch zuordnen, was dann eine vierte Dimension wäre. Genauso ist es mit Arrays, wo jedes Tripel für eine Koordinate steht und dann dementsprechend einen Wert (z.B: Temperatur) besitzt.
 
Oder um es mit den Worten meine Geometrie-Professors zu sagen: "wir leben nicht in einer 3dimensionalen Welt, sondern in einer n-dimensiponalen." Soll heißen: du kannst dir zu jeder xyz-Koordinate im Raum z.B. einen Druck, eine Temperatur oder was weiß ich sonst noch zuordnen, was dann eine vierte Dimension wäre. Genauso ist es mit Arrays, wo jedes Tripel für eine Koordinate steht und dann dementsprechend einen Wert (z.B: Temperatur) besitzt.
was aber wie schon gesagt wurde durch ein intuitiveres model wesentlich angehmer zu pflegen ist, als einen n Dimensionalen raum als n-dim. Array abzubilden....
wer will schon garantieren dass man bei [c]array[8][4][4][2][1][2] = 2[/c] den richtigen index getroffen hat ;-)
 
Normalerweise würde man das nicht mit multidimensionalen Arrays machen. Um auf das obige Beispiel zurückzugreifen: Ich würde da eine [c]List<Schnellhefter>[/c] verwenden, wobei [c]Schnellhefter[/c] wiederum eine [c]List<Zettel>[/c] beinhaltet etc.
 
Schliesse mich da faetzminator an,

ausser bei einer Tabelle oder einer Matrix, bei der es sich anbietet, fährt man mit aussagekräftigen DatenTypen, die dann halt die nächste Liste verwalten um einiges überichtlicher.
 
Tatsächlich gibt es IMHO nur wenige Bereiche, wo ein 3D-Array (oder auch nur ein 2D-Array) wirklich Sinn macht. In vielen Bereichen wäre eine Abstraktion im Sinne der Objektstrukturen (wie schon angedeutet) sinnvoller. Wenn es wirklich nur im "irgendeine abstrakte n-Dimensionale Indizierung" geht, würde es sich in den meisten Fällen vermutlich anbieten, sowas wie
Java:
class Array3D
{
    Object get(Index3D index);
    ....
}
class Index3D { int x, int y, int z; ... }
zu verwenden, um damit die konkrete Implementierung hinter einem klaren Interface zu verstecken. Und die Fälle, wo es aus Effizienzgründen sinnvoll sein könnte, einen 3D-Array zu verwenden... sind IMHO tendenziell die, wo man dann DOCH einen 1D-Array [c]float array[] = new float[sizeX*sizeY*sizeZ][/c] verwenden sollte 😉
 
Wenn Du mit Matrizen rechnest, braucht Du sowas, z.B. ist der vollständige Zeiger auf ein Objekt im Raum eine 3,3 Matrix:

Entfernung x, Geschwindigkeit x, Beschleunigung x
Entfernung y, Geschwindigkeit y, Beschleunigung y
Entfernung z, Geschwindigkeit z, Beschleunigung z

Meistens in der Physik benötigt. Diese Werte werden dann auch mit Matrixalgebra weiterberechnet.
 

Neue Themen


Zurück
Oben