n-Dimensionale Arrays
-
Hi,
Wie erzeuge ich in Java n-dimensionale Arrays, wobei n erst zur Luafzeit bekannt wird. Bzw. ist das überhaupt möglich?
Mfg DerBaer
-
Klar geht das. Einfach mit new erzeugen. Die Variable arrayLength kann dabei dynamisch eingelesen werden.
int[] dynamicArray = new int[arrayLength];
Oder falls du nicht einen Array mit n Elementen meinst:
Du kannst ein Array von einem anderen Array erzeugen, siehe hier:
Multi-Dimensional Arrays
-
Er meint glaube ich n Dimensionen und nicht n Elemente.
Wobei die dimension erst zur laufzeit klar wird.
Klar geht das. In wenn java das nicht von allein kann, schreib einen algorithmus.
-
jetzt bin ich verwirrt.
Ich meinte schon eher das 2., also
Eingabe n = 2:
int[][] a = new int[b][b]
Eingabe n = 4:
int[][][][] a = new int[b][b][b][b]
(b ist bekannt)Aber bei deinem Link, wenn ich den richtig verstehe, machen die hier(paar mal auf Next):
http://www.brpreiss.com/books/opus5/html/page92.html
Ein großes Array, dass einfach bn groß ist und somit mein eigentlich 4-D array in EINE lange Liste hängt, also nur ein pseudo-4D-Array, oder?
Ich meine das wäre zwar auch möglich, aber nicht so elegantwenn java das nicht von allein kann, schreib einen algorithmus.
Ich will nur keinen Algo scchreiben wenns schon nativ geht^^
-
Also ich glaube Native ist das nicht machbar.
aber mit
int a[] = new int[4];
und dann
a[0] = new int[b];
a[1] = new int[b];
a[...] = new int[b];wäre doch das richtige. Daraus kannst du auch eine klasse machen die dir dann hilft.
Auch kannst du eine Liste erzeugen in die du ganz viele int[b] rein machst.
Denke mal Stichwort ArrayList ist da vllt hilfreich.Je nach anwendung geht das auch Parametrisiert
-
DerBaer schrieb:
Wie erzeuge ich in Java n-dimensionale Arrays, wobei n erst zur Luafzeit bekannt wird. Bzw. ist das überhaupt möglich?
Sicherlich
Wie wärs mit der klassischen Methode
int elementeProArray = 10; int tiefe = 3; int[] arr = new int[Math.pow(elementeProArray, tiefe)]; // arr[0] == arr[0][0][0] // arr[9] == arr[0][0][9] // arr[10] == arr[0][1][0] // ...
Diese Methode kommt aus dem C-Bereich und sollte auch in Java verwendet werden. Die Handhabung ist nicht schwer und es weist eine gute Performance, im Vergleich zu mehr dimensonale Arrays, auf.
Mehr dimensonale Arrays zeigen bei n > ~3 einen deutlichen Geschwindigkeitseinbruch. Meistens weisen mehr dimensonale Array's auf einen Design-Fehler in der Umsetzung auf.Möchtest du int[][][]... schreiben, dann must du dir eine Hilfsklasse basteln.
class ArrayList { private int[] arr; private ArrayList owner; // bei Tiefe=0 null private ArrayList child; // bei Tiefe=max null private ArrayList prev; // first Element null private ArrayList next; // last Element null ... }
Die Lösung ist mit Sicherheit eleganter, als die Zeiger-Arithmetik in C++. Oder spielt der Titel auf etwas anderes an
-
Siassei schrieb:
Wie wärs mit der klassischen Methode
int elementeProArray = 10; int tiefe = 3; int[] arr = new int[Math.pow(elementeProArray, tiefe)]; // arr[0] == arr[0][0][0] // arr[9] == arr[0][0][9] // arr[10] == arr[0][1][0] // ...
Bist du dir sicher dass das so funktioniert?
-
Sqwan schrieb:
Siassei schrieb:
Wie wärs mit der klassischen Methode
int elementeProArray = 10; int tiefe = 3; int[] arr = new int[Math.pow(elementeProArray, tiefe)]; // arr[0] == arr[0][0][0] // arr[9] == arr[0][0][9] // arr[10] == arr[0][1][0] // ...
Bist du dir sicher dass das so funktioniert?
Wieso sollte es nicht gehen?
Und vielen dank an euch alle. Ich hab mich jetzt fazu durchgerungen ein 1D-Array zu basteln, das alles enthält