Frage zu mehrdimensionalen Arrays

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich habe eine Frage zu mehrdimensionalen Arrays bzw. wie man sie deklariert. Habe ich das richtig gesehen, daß man normale Arrays per

Code:
int[]  testArray = {1};

deklariert, und mehrdimensionale Arrays per

Code:
int[][] testArray = {{1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}};

? Ganz egal wieviele Dimensionen das Array hat, man schreibt immer nur zwei [] hin um damit "anzuzeigen", daß es sich um ein mehrdimensionales Array mit beliebig vielen Dimensionen handelt (so wie oben beschrieben ein 8 dimensionales Array)?


Der Zugriff auf die einzelnen Felder erfolgt aber ganz normal per

Code:
testArray[0][0][0][0][0][0][0][0][1]
?

Danke,
Fritz

Edit by Beni: blöde Fragen gibt es nicht
Edit by Illuvatar: blöde Fragen gibt es nicht Teil 2
 
Nein, das hast du falsch verstanden.
Code:
int[][] testArray = {{1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}};
ist kein 8 dimensionales Array, sondern ein 2 dimensionales mit einer Spalte, und 8 Zeilen.
 
Code:
int[][] testArray = {{1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}};

Das ist ja auch "nur" ein zweidimensionales Array...

Ansonsten kannst du schon sowas schreiben:
Code:
 int[][][] zzz = new int[4][3][2];
oder irgenwie sowas:
Code:
 int[][][] zzz = { { {4,5,3}, {5,4,5}, {6,5,6,5},{4,5,3}, {5,4,5}, {6,5,6,5}},   
{ {4,5,3}, {5,4,5}, {6,5,6,5},{4,5,3}, {5,4,5}, {6,5,6,5}},
{ {4,5,3}, {5,4,5}, {6,5,6,5},{4,5,3}, {5,4,5}, {6,5,6,5}},   
{ {4,5,3}, {5,4,5}, {6,5,6,5},{4,5,3}, {5,4,5}, {6,5,6,5}}  ;


EDIT: Mist zu langsam...
 
also 2dim array waere das:
Code:
int[][] my2DimArray = {{1,2,3},{4,5,6},{...}}


ein 3dim array waere dann also:
Code:
int[][][] my3DimArray = {{{1,2,3},{4,5,6},{...}} , {{1,2,3},{4,5,6},{...}} , {{1,2,3},{4,5,6},{...}}}

Zugriff:

Code:
my3DimArray[0][0][0] -> 1
my3DimArray[0][0][1] -> 2
u.s.w.

oder hab' ich jetzt dein problem falsch verstanden?
 
Ich schließe mich gleich an was Array-Fragen angeht: Gibt es eine Methode die mir die Dimension eines Arrays zurückgibt oder muss ich mir die selber basteln?

In der JavaDoc habe ich nur Methoden gefunden die mir die Länge zurück geben.....nicht gut genug geschaut? 🙂

ciao,
TP
 
TP hat gesagt.:
Ich schließe mich gleich an was Array-Fragen angeht: Gibt es eine Methode die mir die Dimension eines Arrays zurückgibt oder muss ich mir die selber basteln?

Nein, weil es keine eigentlichen mehrdimensionalen Arrays gibt, sondern nur Arrays in Arrays
 
verstehe....

naja ich bastle gerade zur übung eine klasse die mir die verschachetlung der arrays in der console grafisch darstellt, und ich würde das ganze gerne dynamisch anhand eines übergebenen arrays generieren lassen, daher brauche ich die dimension des arrays früher oder später 😉

ich muss mal grübeln ob ich dazu einen ansatz finde 🙂 ich hoffe durch solche "grundlagenforschung" mich mal mit den absoluten basics vertraut zu machen.

noch eine frage:

Code:
 int length = java.lang.reflect.Array.getLength( array );

Wieso muss man hier expliziet java.lang.reflect angeben? Ein reines

Code:
 int length = Array.getLength( array );
oder
Code:
 int length = getLength( array );

funktioniert nicht.

java.lang

wird ja automatisch importiert,

java.lang.reflect

anscheinend nicht? Finde ich unlogisch, ist reflect doch innerhalb von lang?

(ja ich muss zugeben, bei dem Kapitel Bibliotheken bin ich im Buch nocht nicht angelangt 🙂)

ciao und wiedermal danke 🙂
TP
 
TP hat gesagt.:
Ich schließe mich gleich an was Array-Fragen angeht: Gibt es eine Methode die mir die Dimension eines Arrays zurückgibt oder muss ich mir die selber basteln?

Du könntest dir doch aber noch "helfen":

Sagen wir der Einfachheitshalber du hast ein zweidimensionales array:

Code:
           int[][] testfeld = new int[4][3];
           
           System.out.println("Anzahl der Zeilen = "+testfeld.length);
           System.out.println("Anzahl der Spalten = "+testfeld[0].length);
 
Naja, dieses Methode kann ich ja nur anwenden wenn ich weiß wieviele Dimensionen ein Array hat oder?

Obwohl man natürlich auch pfuschen könnte und die NullPointerException abfangen könnte ;-)

Das sind so meine Vorstellungen 🙂
 
TP hat gesagt.:
...Wieso muss man hier expliziet java.lang.reflect angeben? Ein reines ...

Das "Alles was in java.lang ist wird erkannt"-Konzept gilt nur für Klassen und Interfaces, nicht aber für Unterpackages.

P.S. es geht auch einfacher:
Code:
int length = array.length;
 
TP hat gesagt.:
Naja, dieses Methode kann ich ja nur anwenden wenn ich weiß wieviele Dimensionen ein Array hat oder?

Probier es doch aus, ich hab zwar die Dimensionen angegeben bei der Deklaration, aber bei der Ausgabe verwerte ich das ja nicht explizit, sondern lass die "Länge" des Arrays und der Zeilen (sozusagen) bestimmen.
 
Beni hat gesagt.:
P.S. es geht auch einfacher:
Code:
int length = array.length;
ja danke, das kannte ich schon. ich hatte nur die hoffnung das mir die von mir benütze methode die dimension bringt und ich nur zu blöd war die doku zu verstehen 😉

mic_checker: was ich meine ist folgendes:

Code:
   int[][][] testfeld = new int[4][3][8];
   
   System.out.println("Anzahl der Zeilen = "+testfeld.length);
   System.out.println("Anzahl der Spalten = "+testfeld[0].length);

Output:

Anzahl der Zeilen = 4
Anzahl der Spalten = 3

die dritte Dimension wird ja nicht abgefragt - woher auch? 🙂

Worauf ich hinaus will ist: Man müsste das ganze doch rekrusiv per schleife solange durchlaufen lassen bis eine java.lang.ArrayIndexOutOfBoundsException Fehlermeldung kommt. Wenn ich nicht weiß wieviele Dimensionen das Array hat muss ich es ja irgendwie herausfinden. Meine Idee ist eben so, daß man abfragt ob

testFeld[0]

existiert

dann ob

testFeld[0][0]

existiert, dann ob

testFeld[0][0][0]

existiert, dann ob

testFeld[0][0][0][0]

existiert usw -> bis eben die indexoutofbounds-exception kommt, dann weiß man doch, daß diese "tiefe" nicht mehr gibt oder? klar, eine absolute pfusch methode, aber ich habe keine andere idee wies sonst gehen soll wenn man die dimension des arrays nicht kennt.

verstehst du worauf ich hinaus will? 🙂

ciao,
TP
 
Stell dir ein Array wie ein Buch vor (die Seiten sind die Elemente, die Seitenzahlen der Index).

Also: ein Buch = ein Array "String[] array"

Ein Büchergestellt ist eine Sammlung von Arrays: Büchergestellt = "String[][] array".

Nun müssen innerhalb eines Büchergestelltes aber nicht nur gleichgrosse Bücher stehen, sie können auch unterschiedliche Anzahl Seiten haben. Aber es wird garantiert kein Buch innerhalb eines Buches sein.

Bei deinem testfeld[][][] (sozusagen ein Raum voller Büchergestelle), weisst du bereits, dass es ein Array von Arrays von Arrays ist, du musst also nicht herausfinden wie tief diese Rekursion geht.

Wenn du z.B. alle Werte dieses testfeldes ausgeben willst, machst du das dann am einfachsten so:
Code:
int[][][] testfeld = ???

for( int i = 0; i < testfeld.length; i++ )  // Anzahl "Büchergestelle" abfragen
  for( int j = 0; j < testfeld[i].length; j++ )    // Anzahl "Bücher" im aktuellen "Gestell" abfragen
    for( int k = 0; k < testfeld[i][j].length; k++ )      // Anzahl "Seiten" im aktuellen "Buch" abfragen
      System.out.println( "Wert " + i + ", " + j + ", " + k " ist: " +testfeld[i][j][k]  );
 
ich habe irgendwo einen knoten in meinem gehirn, mal schaun ob ich dne aufbekomme 😉 danke für dein ausführliches posting beni!

mic_checker: hehe für mich ja auch nicht, deswegen rede ich ja von "pfusch" 🙂

ciao
TP
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben