# Mehrdimensionalen Array ausgeben



## w0ddes (3. Dez 2009)

Hey,

ich bin's schon wieder  
Ich habe jetzt einen mehrdimensionalen ObjectArray  
	
	
	
	





```
Object [][] daten;
```
 Dieser ist bereits mit Daten gefüllt.

Wenn ich jetzt 
	
	
	
	





```
System.out.println(daten);
```
 aufrufe, bekomme ich die Ausgabe: 
	
	
	
	





```
[[Ljava.lang.Object;@1b67f74
```

Bei dem Aufruf 
	
	
	
	





```
System.out.println(Arrays.toString(daten));
```
 wird es zu: 
	
	
	
	





```
[Ljava.lang.Object;@1a758cb, [Ljava.lang.Object;@1b67f74, [Ljava.lang.Object;@69b332, [Ljava.lang.Object;@173a10f, [Ljava.lang.Object;@530daa, [Ljava.lang.Object;@a62fc3, [Ljava.lang.Object;@89ae9e, [Ljava.lang.Object;@1270b73, [.........]
```

Wie kann ich das weiter umformatieren bzw. die Ausgabe richtig einstellen?

mfg 

Jens


----------



## The_S (3. Dez 2009)

In einer Schleife alle Elemente durchgehen und dann mit Arrays.toString arbeiten. Oder mit zwei verschachtelten Schleifen alle Elemente einzeln durchgehen und ausgeben.


----------



## w0ddes (3. Dez 2009)

Schonmal danke für die schnelle Antwort.

Ich steh grade aber voll auf dem Schlauch... 

Ich hab das Ganze jetzt so:
	
	
	
	





```
for(int i=0; i <daten.length/6; i++){
					System.out.println("Gesammter ObjectArray: " + Arrays.toString(daten[i]));
			}
```
Die Formatierung der Ausgabe stimmt nun, also ich bekomm es als Matrix so angezeigt wie ich möchte, jedoch steht noch immer 
	
	
	
	





```
[Ljava.lang.Object;@10b4199; [.......]
```
 in der Ausgabe


----------



## KrokoDiehl (3. Dez 2009)

Warum kein

```
Object[][] array = ...;
for (int i = 0; i < array.length; i++)
{
    for (int j = 0; j < array[i].length; j++)
        System.out.print( array[i][j].toString() + ", " );
    System.out.println();
}
```
...ok, es knallt wenn ein Eintrag null ist   Aber ich meine die grobe Form.


----------



## The_S (3. Dez 2009)

KrokoDiehl hat gesagt.:


> Warum kein
> 
> ```
> Object[][] array = ...;
> ...



Dann lass das "toString" weg, dann knallts nicht, wenn ein Eintrag null ist  .


----------



## The_S (3. Dez 2009)

w0ddes hat gesagt.:


> Schonmal danke für die schnelle Antwort.
> 
> Ich steh grade aber voll auf dem Schlauch...
> 
> ...



Warum daten.length / 6? Wie schaut den die toString-Methode deiner Objekte aus? Die muss natürlich korrekt überschrieben sein!


----------



## w0ddes (3. Dez 2009)

So, ich hab hier doch noch n paar andere Probleme  . . . vllt liegts daran.

Ich meld mich, sobald ich den Rest behoben hab.


----------



## w0ddes (3. Dez 2009)

Ich bin heute irgendwie unfähig ... 

Nochmal von ganz vorne.. 

Ich hab eine ArrayList<String>, diese füll' ich mit nem Scanner mit Strings.. 
Diese Strings möchte ich dann in einem ObjektArray speichern (jaa, es dreht sich noch um das Problem von gestern  ) 
Aber nochmal zur Erklärung: ich brauche einen Objektarray, da ich später auch ImageIcons (was ja nun zum glück funktioniert) drin speicher möchte.


```
public Object[][] daten = null;

                  //[......]

        ArrayList<String> readIn =new ArrayList<String>();
		String wort = null; 
		
		try{
		  	Scanner sc =new Scanner(source);			

		  	while (sc.hasNext()) {
				wort = sc.next();
				readIn.add(wort);
			}
											
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	      daten = new Object[readIn.size()][];   		//Größe des Array's nach "Anzahl Wörter" 
			
			for (int j = 0; j<6; j++){				//Schleife so lang, wie es Spalten gibt		(6 ist vorgegben)
				int i =0;
				daten[i][j] = readIn.get(i);		//Strings werden eingefügt
				i++;			    
			}
```
Was mach ich denn falsch? ô.o

Achso: Ich bekomm eine NullPointerException in (hier) Zeile 24


----------



## 0din (3. Dez 2009)

lass das ganze doch mal durch den debugger laufen un schau dir an welche werte j & i durchlaufen un was in den positionen liegt, dann wird dir vllt deutlich wo dein fehler liegt


----------



## N1klaZ (3. Dez 2009)

Das wird glaube ich dein Fehler nicht beheben aber in der Schleife ist glaube ich schonmal etwas falsch. Und zwar erhöht sich i hier nicht. Dadurch das in der Schleife 
	
	
	
	





```
int i = 0;
```
 i immer wieder auf 0 zurückgesetzt wird.

```
for (int j = 0; j<6; j++){              //Schleife so lang, wie es Spalten gibt     (6 ist vorgegben)
                int i =0;
                daten[i][j] = readIn.get(i);        //Strings werden eingefügt
                i++;                
            }
```


----------



## w0ddes (3. Dez 2009)

ich komm einfach nicht dahinter -.- 

Wird Zeit für Mittagspause und Feierabend .. Gestern hab ich das doch auch hinbekommen ..


----------



## w0ddes (3. Dez 2009)

N1klaZ hat gesagt.:


> Das wird glaube ich dein Fehler nicht beheben aber in der Schleife ist glaube ich schonmal etwas falsch. Und zwar erhöht sich i hier nicht. Dadurch das in der Schleife
> 
> 
> 
> ...



ja da hast recht *an kopf klatsch* .. problem ist dadurch wirklich nicht behoben ..


----------



## KrokoDiehl (3. Dez 2009)

```
daten = new Object[readIn.size()][];          //Größe des Array's nach "Anzahl Wörter" 
            
            for (int j = 0; j<6; j++){              //Schleife so lang, wie es Spalten gibt     (6 ist vorgegben)
                int i =0;
                daten[i][j] = readIn.get(i);        //Strings werden eingefügt
                i++;                
            }
```
Was soll dieser Code denn tun? Du liest deine Daten in eine _ArrayList_. Diese ist eindimensional. Danach willst du ein _Object[][]_ befüllen, das ist zweidimensional ...hier ist schon einmal eine gewisse Diskrepanz.
Mit 
	
	
	
	





```
daten = new Object[readIn.size()][];
```
 erstellst du ein Array der Größe der _ArrayList_, dass an jeder Stelle ein _Object[]_-Typ erwartet. Aber da die zweite Dimension nicht angegeben ist, ist sie null. Der Zugriff in der Schleife 
	
	
	
	





```
daten[i][j] = readIn.get(i);
```
 geht also nicht, weil die _j_-Dimension hier null ist.

Du sagst im Kommentar, dass du 6 Spalten vorgegeben hast? Dann müsste deine Array doch wie folgt initialisiert werden:

```
daten = new Object[readIn.size()][[COLOR="Red"]6[/COLOR]];
```
Dann ist mir nicht klar, wo du die Eingaben aus der _ArrayList _hin haben willst ... bisher sieht dein Array nun so aus:

```
0    1    2    3    4    5
0  null  null null null null null
1  null  null null null null null
...
n  null  null null null null null
//n == readIn.size()
```


----------



## w0ddes (3. Dez 2009)

Ich glaub ich hab's 


```
daten = new Object[readIn.size()/6][6];   		//Größe des Array's nach "Anzahl Wörter" 
		int k = 0;	
		for(int i = 0; i< readIn.size()/6;i++){
			for (int j = 0; j<6; j++){				//Schleife so lang, wie es Spalten gibt		(vorgegben)
				daten[i][j] = readIn.get(k);		//gesplitteter String wird in einzelne Felder je Zeile eingefügt   
				k++;
			}
		}
```

Die Mittagspause hat mir geholfen  Kopf is wieder frei


----------



## SVW1913 (4. Dez 2009)

Hallo Zusammen,

ich habe mir schon viele Beiträge angeschaut, aber leider war der passenden nicht dabei.
Mein Problem ist, dass ich ein Arraylist habe vom Typ String[].
Wie kann ich nun dieses Arraylist<String[]> in einer ListBox Zeile für Zeile ausgeben?!

Mein bisheriger Quelltext:

			public void onSuccess(ArrayList<String[]> result)			
			{
					cbCenter.setEnabled(true);                      //Meine Listbox
					for (int i=0; i<result.size(); i++)                //Eine For-Schleife, damit Zeiel für Zeile eingelesen wird
					{
						result.get(i);	
                                                  ...
					}
			}


----------



## w0ddes (4. Dez 2009)

öffne lieber ein eigenes Thema, dann bekommst du vllt mehr und bessere Hilfe


----------



## eRaaaa (4. Dez 2009)

SVW1913 hat gesagt.:


> Hallo Zusammen,
> 
> ich habe mir schon viele Beiträge angeschaut, aber leider war der passenden nicht dabei.
> Mein Problem ist, dass ich ein Arraylist habe vom Typ String[].
> ...



was ist eine listbox ? meinst du eine jlist oder um was geht es?

/edit: falls ja

```
String[] elements1 = { "Hallo", "Welt" };
		String[] elements2 = { "JAVA", "Forum" };
		List<String[]> listElements = new ArrayList<String[]>();
		listElements.add(elements1);
		listElements.add(elements2);
		JList list = new JList();
		DefaultListModel model = new DefaultListModel();
		for (String[] strings : listElements) {
			for (String string : strings) {
				model.addElement(string);
			}
		}
		list.setModel(model);
```
 oder soll ein array = eine zeile?


```
StringBuilder builder = new StringBuilder();
		for (String[] strings : listElements) {
			for (String string : strings) {
				builder.append(string);
				builder.append(", ");
			}
			model.addElement(builder.toString());
			builder.delete(0, builder.length());
		}
```

oder direkt ein eigenes listmodel


----------



## SVW1913 (4. Dez 2009)

Ich arbeite zusätzlich mit GWT.
Also ja, es soll ein jList sein.

Ich habe eine Datei mit mehreren Informationen angelegt, die auch mit Semikolons getrennt sind.
Mit der Funktion split() konnte ich mein Arraylist so aufteilen, dass die einzelnen Informationen getrent in Arrays stehen.
Beispiel:
1;Name;Adresse

Mein Arraylist<String[]> hat den Namen result und die Informationen stehen auch alle in result drin.
Wie kann ich dies nun in meine Listbox ausgeben?

Danke für eure Hilfe!!!


----------



## eRaaaa (4. Dez 2009)

SVW1913 hat gesagt.:


> Ich arbeite zusätzlich mit GWT.


achsooo, die listbox aus dem gwt, okay. da musst du addItem(string); aufrufen

```
StringBuilder builder = new StringBuilder();
        for (String[] strings : result) {
            for (String string : strings) {
                builder.append(string);
                builder.append(", ");
            }
            listbox.addItem(builder.toString());
            builder.delete(0, builder.length());
        }
```
 (dürfte gehen)


> Also ja, es soll ein jList sein.



???:L


----------



## SVW1913 (4. Dez 2009)

Danke für eure Hilfe!!!
Ich hab die Lösung gefunden.

Beispiel:
				for (int i=0; i<result.size(); i++) 
				{
					listbox.addItem( result.get(i)[2] );


----------

