# [Problem] Dreidimensionales Array



## phoenix-2000 (24. Mai 2007)

Guten Abend 

also ich hab ein neues Projekt und brauche glaube ich dafür ein dreidimensionales Array. Zweidimension war ja noch einfach, aber jetzt steig ich da nicht mehr durch. 

Erstmal was möchte ich speichern bspw.


```
===================
Spalte 0        |      Spalte 1
===================

"Strecke 0"   |   "22", "24","5"
                       "24", "27","3"
                       "22", "12","1"

"Strecke 1"   |   "22", "12","5"

"Strecke 2"   |   "22", "24","5"
                       "24", "17","3"
                       "12", "15","10"
                       "15", "12","8"
```
ich hoffe ich konnte das Problem deutlich schildern. Also zu einer Strecke (Spalte 0) können mehrere Zeilen zugehören (oder auch 0 oder mehrere ... ist nicht festgelegt)

Nun habe ich gedacht, kann man doch bestimmt einfach mit JAVA lösen und habe folgende Deklaration vorgenommen:


```
String test[][][][] = {
			{ "Strecke 0",{ 
							{"22,"24","5"},
							{"24,"27","3"},
							{"22,"12","1"}
						  },
			{ "Strecke 1",{ 
							{"22,"12","5"}
						  },			   
			{ "Strecke 2",{ 
							{"22,"24","5"},
							{"24,"17","3"},
							{"12,"15","10"},
							{"15,"12","8"}
						  }
		};
```

Geht aber nicht ... wie geht das sonst?

Ich würde mich freuen eine Lösung von euch zu hören. Vll. doch ein 4 dimensionales? Ich hab keine Ahnung.

Schon mal vielen Dank für eure Antworten

mfg
Stefan[/code]


----------



## SlaterB (24. Mai 2007)

warum gleich so hochtrabend?
fange doch erstmal mit zwei Dimensionen an!

und dann musst du dir was überlegen,
denn:
eine Zeile füllt ein String[] 

```
------------
```
kein Platz für irgendwas anderes


mehrere Zeilen füllen ein String[][]

```
------------
------------
------------
------------
------------
```
auch wieder kein Platz für "Strecke 0" oder was immer du noch reinschreiben willst,

willst du nun ein 3D-Array draus machen, nur für den einen Beschreibungsstring?

sähe dann korrekt geklammert etwa so aus:

```
String test[][][] =
        {
            {
                {"Name"}            },
            
            {
                {"22", "24", "5"},
                {"24", "27", "3"},
                {"22", "12", "1"}    }          };
```

Alternative: Namen in erste Zeile des 2D-Arrays schreiben:

```
String test[][] =
        {
                {"Name"} ,
                {"22", "24", "5"},
                {"24", "27", "3"},
                {"22", "12", "1"}      };
```


in beiden Fällen dürfte für mehrere dieser Blöcke ein höheres Array nun leicht sein

--------

oder du verwendest ein Object[]:
im ersten Feld der String zur Beschreibung, im zweiten Feld das String[][] "22" bis "1"
lässt sich dann allerdings nicht mehr in einem Stück definieren

oder in einem String[][][] abwechselnd die 2D Blöcke und die Namen dazu


----------



## Saxony (25. Mai 2007)

Hiho,

und wie wärs damit:


```
class MyClass {

    private String name;
    Vector<MyValues> werte;

   public void setName(String aName) { this.name = aName; }
   public void addWerte(MyValues aValues) { this.werte.add(aValues); }
}

class MyValues {

   Vector<String> werte;

      public void addEinzelWert(String aWert) { this.werte.add(aWert); }
}

...

Vector<MyClass> strecken;

strecken = new Vector<MyClass>();

MyValues val = new MyValues();
val.add("1");
val.add("2");
val.add("3");

MyClass myClass= new MyClass();
myClass.setName("Strecke01");
myClass.addWerte(val);

strecken.add(myClass)

...
```

Somit kannst du nun zu beliebig viele Strecke beliebig viele Tupel mit je beliebig vielen Werten ablegen. 

bye Saxony


----------



## Marco13 (25. Mai 2007)

Du solltest in Erwägung ziehen, deinen 2D-Array in einer Klasse zu Kapseln und/oder den String "Strecke0" nur mit einer Map auf diese Arrays/Objekte abzubilden.


----------



## JPKI (25. Mai 2007)

Wie wär's mit einem Array aus Hashtables? Wenn jeder "Strecke" ein Array aus Zahlen zugeordnet wird, es vielleicht sinnvoll, eine Kapsel-Klasse für das Zahlenarray zuschreiben und diese in einer Hashtable<String,WrapperClassForIntegerArray> zu schreiben.


----------



## phoenix-2000 (26. Mai 2007)

Guten Morgen und danke für eure zahlreichen Antworten 

hab mal weiter überlegt und schon mal gesehen, dass ich gar nicht die Beschreibung "Strecke 0 ... n" gar nicht brauche, weil sich das über den Index lösen lässt (und ich den nachher auch gar nicht ausgebe).

Aber trotzdem brauchte ich ein dreidimensionales Array und da hat mir SlaterB sehr geholfen.

So lässt es sich kompilieren:


```
String test[][][] = 
        {            
            
            { 
                {"22", "24", "5"}, 
                {"24", "27", "3"}, 
                {"22", "12", "1"}    },
            { 
                {"22", "12", "5"}    },
            { 
                {"22", "24", "5"}, 
                {"24", "27", "3"}, 
                {"24", "27", "3"},
                {"22", "12", "1"}    }              };
```

Da habe ich auch gleich schon mal eine for-schleife gebastelt und die Werte einmal durchzugehen:

```
for(int i=0; i<test.length; i++) {
        	System.out.print("günstigste Fahrt " + i + "\t");        	
        	
        	for(int j=0;j<test[i].length; j++) {
        		
        		for(int k=0;k<test[i][j].length;k++) {
        			System.out.print(test[i][j][k] + " ");
        		}
        		System.out.println();
        	}
        }
```

funktioniert auch so weit ... nur dann hat ja *Saxony* was interessantes über Vectoren geschrieben. Denn hab ich auch schon mal bei google geguckt und gesehen, dass ein Vector die Größe automatisch anpasst => genau das brauche ich. 
Aber dort habe ich nur genaue Anleitungen gefunden, wie man auf ein eindimensionalen Vector zugreift und nie richtig genaue Erklärungen.
Arrays kenne ich noch aus anderen Programmiersprachen 

Mal eine bitte an Saxony ... könntest du, wenn du heute eine freie Minute hast oder so, mal ein Beispielcode zu deinem Script schreiben um zB genau die Werte (kannst dir natürlich welche ausdenken, aber die Menge wäre interessant (wie bei mir => bei der ersten 3, dann nur 1, und dann wieder 4)) in deinem Code zu schreiben und dann auch wie ich das grade mit den for-schleifen gemacht habe, dass auslesen des Vektors nach diesem Schema.

Wäre sehr lieb von dir Saxony.

Danke dir schon mal im voraus.

Lg
Stefan


----------

