# Mehrdimensionales array füllen



## Einklang. (29. Jun 2012)

ich möchte ein mehrdimensionales array füllen und komm hier nicht weiter:


```
int a = 0;
        int b = 0;
        int c = 0;
        
        String [][][] daten = new String[a][b][c]; 
        
        
        while (resulttable.next())
         {
        	 System.out.println("Tabelle in Datenbank gefunden: " + resulttable.getString(1));
        	 daten[a]=resulttable.getString(1);
```

Fehlermeldung: 
Multiple markers at this line
	- Type mismatch: cannot convert from String to String[][]
	- Line breakpoint:ButtonDBTablezweite [line: 182] - 
	 testconnectionDB(DefaultTableModel)

Dann hab ich noch eine Frage: muss ich noch ein "a=a+1" darunter setzen, damit nicht das gleiche Feld im nächsten Durchgang gefüllt wird?
(in einem Buch wird nur immer eine for-schleife benutzt und die ersten Dimension von mehrdimensionalen Feldern werden von Hand gefüllt.....)


----------



## Marcinek (29. Jun 2012)

Du hast ein Array Array Array String

Du möchtest aber Array = String machen und das geht nicht.

Mache:  daten[a]*[c]=resulttable.getString(1);



Einklang. hat gesagt.:



			Dann hab ich noch eine Frage: muss ich noch ein "a=a+1" darunter setzen, damit nicht das gleiche Feld im nächsten Durchgang gefüllt wird?
		
Zum Vergrößern anklicken....


ja klar ;D*


----------



## Einklang. (29. Jun 2012)

> Mache: daten[a]*[c]=resulttable.getString(1);*


*

Ja dann wird aber c befüllt oder? Ich möchte a beschreiben......

Und dann weiter unten b, dann c..............! (Mit ner Schleife....)*


----------



## Einklang. (29. Jun 2012)

Ich hab das probiert, bekomm aber bei der Ausgabe wiederum eine Fehlermeldung:


```
System.out.println("Arraydaten a " + daten[a]);
```

Fehlermeldung: 





> Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0


----------



## mla.rue (29. Jun 2012)

Hm und? Laut deinem Code erzeugst du ein Array, wo jede Dimension die Grösse 0 hat und jetzt zuletzt greifst du auf Index 0 zu, den es nicht gibt.


----------



## Einklang. (29. Jun 2012)

Ne eigentlich sollte da ja was drinstehen:


```
int a = 0;
        int b = 0;
        int c = 0;
        
        String [][][] daten = new String[a][b][c]; 
        
        while (resulttable.next())
         {
        	 System.out.println("Tabelle in Datenbank gefunden: " + resulttable.getString(1));
        	 daten[a][b][c]=resulttable.getString(1);
        	 System.out.println("Arraydaten a " + daten[a]);
        	 a=a+1;
```

Bzw ist ja das mein Problem, dass ich a befüllen möchte und dann b usw - aber anscheinend wird a so nicht befüllt! 
In meinem Buch wird das leider nicht so ausführlich beschrieben..... drum frag ich hier....!


----------



## mla.rue (29. Jun 2012)

```
int a = 0;
int b = 0;
int c = 0;
        
//was fehlt hier?

String [][][] daten = new String[a][b][c];
```

Wie gesagt.. du intiliasierist jeweils a,b und c mit 0.
Dann erstellst du ein 3d array der Größen 0 0 0 (man kann auch sagen: du erstellst etwas, das nichts ist)
Zum Schluß versuchst du auf die Position 1 (Index 0... weil a ja 0 ist) zuzugreifen und dir anzuzeigen, was da ist, da Position 1 aber nicht existiert, kommt die Fehlermeldung.

Ich kann mir auch schwer vorstellen, dass dir irgendein Buch vorschlägt, eine Datenbanktabelle in einem 3d Array abzubilden.

Wie wärs du fängst von Vorn und sagst was genau du überhaupt anstellen möchtest? Ich kann deinem Ansatz was zu machen nichts entnehmen, wo ich ansetzen könnte sorry :/. Evtl schaut aber auch mal Slater vorbei .


----------



## Einklang. (29. Jun 2012)

Jetzt mal ehrlich - was soll so ein Beitrag?

Es fehlt der halbe Code und dann wird nur über die erstne zwei Zeilen gesagt, dass es 0 ist - das ist doch klar! Aber dass der Code in der while SChleife auch noch da ist und da das array nicht befüllt wird - das ist doch das Problem!

Was soll also dieser Beitrag?


----------



## Marcinek (29. Jun 2012)

Die Lösung zu dem aktuellen Problem wurde genannt.

Hast du weitere Fragen dazu?


----------



## Einklang. (29. Jun 2012)

Welche Lösung? Es wurde höchstens gezeigt was das Problem ist.... aber ich frag ja nach ner Lösung...! Dass da 0 drin steht hab ich ja selber schon gesagt...! :-D

Die Felder werden nicht befüllt - das ist das PRoblem!!

Hier wird nix befüllt bzw wenn befüllt keine Werte ausgegeben......:


```
while (resulttable.next())
         {
             System.out.println("Tabelle in Datenbank gefunden: " + resulttable.getString(1));
             daten[a][b][c]=resulttable.getString(1);
             System.out.println("Arraydaten a " + daten[a]);
             a=a+1;
```


----------



## mla.rue (29. Jun 2012)

a) wie Marcinek sagt wurde die Lösung genannt
b) somit kommentiere ich deine Fehlermeldung "indexOutOfBounds" die nur sagt, dass du auf einen Index zugreifst, den es nicht gibt, warum auch immer (der Einfachheithalber benutzte ich zur Erklärung den Coden, der mir vorliegt)

Ich würde mich eher fragen, woher diese Aggressivität kommt. Wie auch immer, hast du spezifische Fragen, zb. zu der indexOutOfBounds Fehlermeldung, oder soll ich weiter raten?

@TO: poste mal bitte wie dein resulttable zustandekommt


----------



## njans (29. Jun 2012)

Sicher, dass es nicht daran hapert, dass du
	
	
	
	





```
System.out.println("Arraydaten a " + daten[a]);
```
Aufrufst und dann eben nicht ausgegeben bekommst, was da drin steht sondern nur classname@hashcode ?


----------



## Einklang. (29. Jun 2012)

ne leider nicht - sonst wärs ne Typeumwandlung oder?

Ne ich bekomm ne rote Fehlermeldung:



> Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
> at ButtonDBTablezweite.testconnectionDB(ButtonDBTablezweite.java:180)
> at ButtonDBTable.testDBActionPerformed(ButtonDBTable.java:551)
> at ButtonDBTable.access$8(ButtonDBTable.java:547)
> ...



usw.....!


----------



## Marcinek (29. Jun 2012)

http://www.java-forum.org/java-basi...ang-arrayindexoutofboundsexception-0-0-a.html


```
Welche Lösung? Es wurde höchstens gezeigt was das Problem ist....
```

Eventuell solltest du dir ein Javabuch nehmen und diese Grundlagen nochmal aufarbeiten.


----------



## Einklang. (29. Jun 2012)

Ja das ist wieder mein altes Problem hier - man bekommt irgendwas vor die Füße geworfen und es bleibt einem selbst überlassen was man damit anfängt - wenn man nix damit anfangen kann weil man keine Erfahrungen damit hat bekommt man nicht etwa genauere Angaben, sondern... naja, Diskussionen - weil einfach die Vorstellung fehlt, dass andere Leute nicht den gleichen Kenntnissstand haben...! ;-)

Wie ich schonmal gesagt hab: Es herrscht anscheinend die völlige Unfähigkeit sich in den Kenntnisstand des Anderen hineinzuversetzen....... so kommt halt keine Hilfe zustande! Jemand ohne Vorkenntnisse kann mit dem halt nix anfangen, es bedarf der Erklärung!
Ein Satz hätte hier zb wieder genügt: in einem mehrdimensionalen Array können nur im letzten Feld Daten als String abgelegt werden und die anderen dienen zur Referenzierung/Orientierung, wo dieses Feld liegt....! Damit wärs erklärt gewesen warum es nicht funktioniert (kognitiv hätte sich das aus einer Schlussfolgerung dieses Satzes ergeben - es steht nicht direkt drin)! 

Das steht übrigens auch nicht in meinem Buch.... für Java Anfänger.... drum frag ich hier im Forum.... hab ich das schon gesagt?! ;-)


----------



## nillehammer (29. Jun 2012)

Es wurde eigentlich schon alles gesagt, aber vielleicht nicht verständlich/ausführlich genug. Deswegen noch ein paar Erklärungen, von denen ich glaube, dass Sie hilfreich sein könnten:

```
// liefert KEINEN String, sondern einen Array (aus Arrays)
daten[a]

// liefert KEINEN String, sondern einen Array (aus Strings)
daten[a][b]

// liefert einen String
daten[a][b][c]
```
Ursache für die 
	
	
	
	





```
ArrayIndexOutOfBoundsException
```
: Mit den Zeile hier:

```
int a = 0;
        int b = 0;
        int c = 0;
        
        String [][][] daten = new String[a][b][c];
```
erzeugst Du einen 3d-Array, der in allen Dimensionen die Länge 0 hat. In einen Array der Länge 0 kann man nichts speichern und auch nichts rausholen. Da die Länge eines einmal initialisierten Arrays nachträglich nicht verändert werden kann, gilt das für immer. D.h. egal, was für einen Index Du angibst, es gibt ihn nicht, die 
	
	
	
	





```
ArrayIndexOutOfBoundsException
```
 fliegt immer.

Lösungsvorschläge:
Wenn es unbedingt der 3D-Array sein soll: Du musst *vor* Initialisierung des Arrays für alle drei Dimensionen die benötigten Längen ermitteln (die natürlich alle > 0 sein müssen). Dann kannst Du mit einer dreifach verschachtelten Schleife den Array befüllen. Wenn Du die benötigten Längen vorher nicht ermitteln *kannst*, ist Dein Problem *mit Arrays nicht lösbar* (zumindest nicht sinnvoll). Abgesehen davon ist das Handling eines 3D-Arrays sowei eine dreifach verschachtelte Schleife so unübersichtlich, dass fortgeschrittene Programmierer sowas nicht machen würden.

Deswegen der dringende Rat zu zwei Alternativen:
- Java ist eine strukturierte Sprache. Es besteht nicht die Notwendigkeit, Datenstrukturen in Mehrdimensionalen Arrays abzubilden. Schreib Dir eine Klasse ResultZeile mit entsprechenden Instanzvariablen und speichere allenfalls diese in einem Array ab. (Bleibt aber immer noch das Problem der vorher zu bestimmenden benötigten Länge), darum:

-Nutze List, da kann man dynamisch Werte hinzuadden.


----------



## Einklang. (29. Jun 2012)

Super besten Dank.

Genau das ist das was ich wissen wollte - ich hab auch noch Erklärungen als private Nachricht erhalten und werde hier dann mal noch mit den Arrays austesten und wohl auch berichten... !  

besten Dank


----------

