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 elegant 😉

    wenn 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 😉


Anmelden zum Antworten