# 2D Array mit unterschiedlichen Längen erstellen und befüllen



## Mr TILT (11. Jan 2018)

Hallo ich wollte für die UNI heute ein Programm schreiben, dass ein 2dimensionales Array mit unterschiedlicher länge der Zeilen und fixer Zeilenanzahl erstellt und dieses dann befüllt. Mein Problem ist, dass ich bei meinen Versuchen entweder ein leeres Array produziere oder eine Fehlermeldung
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at test.main(test.java:17)


```
public class test {
    public static int[][] array;

    public static void main(String[] args) {
        int rows = 5;//fixe Zeilenanzahl

        array = new int[rows][];



        for(int i=0;i<5;i++){ //zum Erstellen des Arrays mit unterschiedlicher Länge
            int randomInt=(int)(Math.random()*10+1);//Zahl zwischen 1 und 10
            array= new int [i][randomInt];
        }

        for(int i=0; i<5;i++){
            for(int j=0; j<array[i].length;j++){
                int randomInt=(int)(Math.random()*20+1);//Zahl zwischen 1 und 20
                array[i][j]=randomInt;
            }
        }

        for (int i = 0; i < 5; i++) {//ausgabe des Arrays
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
    }
}
```


----------



## DefconDev (11. Jan 2018)

Dir ist bewusst was der new Operator bewerkstelligt?
In der ersten For-Schleife wird permanent ein neues Array erstellt.
array = new int[0][Zufallszahl]
array = new int[1][Zufallszahl]
array = new int[2][Zufallszahl]
array = new int[3][Zufallszahl]
array = new int[4][Zufallszahl]

0-4 sind deine i-Zahlen aus deiner For-Schleife.
array[4][Zufallszahl] ist dann das letzte Array was gültig ist. Also mit dem Array wird in deinen anderen Schleifen weiter gearbeitet.
Und was erwartest du dir von 
	
	
	
	





```
array[i].length
```
_ in deiner zweite Schleife?_


----------



## Mr TILT (11. Jan 2018)

Mein Plan war es durch die ersten 2 Schleifen ein Array mit jeweils 5 unterschiedlichen langen Zeilen also z.B.

```
{1,2,3} {7} {4,6}{3,1,5,7,9,2,4} {5,3}
```
zu erstellen und ich wollte mit der 2 Schleife das Array befüllen


----------



## Robat (11. Jan 2018)

Der Fehler liegt hier.

```
array= new int [i][randomInt];
```
Was du suchst ist:

```
array[i] = new int[randomInt]
```

Unterschied: Du überschreibst das gesamte Array .. du willst aber nur das innere Teilarray neu initialisieren.


----------



## Robat (11. Jan 2018)

Hades85 hat gesagt.:


> Und was erwartest du dir von




```
array[i].length
```
Das gibt die Länge des inneren Arrays an der Stelle i zurück


----------



## DefconDev (11. Jan 2018)

Achso, du gehst davon aus dass du in der ersten Schleife 5 mal ein Array unterschiedlicher Länge an Zeilen erstellt hast die außerhalb der ersten Schleife gültig ist?

Um dir einen Hinweis zu geben, wie oben in meinen Text geschrieben, erstellst du am Schluss der Schleife nur ein int array, alle anderen wurden immer wieder überschrieben. Also solltest du dir Gedanken machen wie du das löst.

Auch war meine Frage, was du erreichen willst mit der Zeile Code 
	
	
	
	





```
array[i].length
```
 war ein Wink mit dem Zaunpfahl, genau dort wird eine Exception geworfen.


----------



## DefconDev (11. Jan 2018)

Robat hat gesagt.:


> ```
> array[i].length
> ```
> Das gibt die Länge des inneren Arrays an der Stelle i zurück


Dir ist aber schon klar dass er durch die zweite Dimension iteriert, die null Sinn macht und zu dem eine Exception wirft.


----------



## Robat (11. Jan 2018)

Nö wenn man die von mir o.g. Fehler korrigiert macht der Code genau das was er soll


----------



## Mr TILT (11. Jan 2018)

Robat hat gesagt.:


> Der Fehler liegt hier.
> 
> ```
> array= new int [i][randomInt];
> ...



Danke hat mir geholfen und mein Problem gelöst.


----------



## DefconDev (11. Jan 2018)

Robat hat gesagt.:


> Nö wenn man die von mir o.g. Fehler korrigiert macht der Code genau das was er soll


Ja, klar macht er das. Darum habe ich das in meinem ersten Post zusammenhängend dargestellt.Denn sein Code war fehlerhaft. Daher der fette Wink mit dem Zaunpfahl. Wer an der Uni ist, kann auch ein bisschen selber nachdenken oder nicht?


----------



## Robat (11. Jan 2018)

Hades85 hat gesagt.:


> Wer an der Uni ist, kann auch ein bisschen selber nachdenken oder nicht?


Sagt ja keiner das der TE nicht nachgedacht hat


----------



## DefconDev (11. Jan 2018)

Robat hat gesagt.:


> Sagt ja keiner das der TE nicht nachgedacht hat


Du hast ihm aber direkt die Lösung präsentiert. Das regt weniger an...


----------

