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

Mr TILT

Mitglied
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)

Code:
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();
        }
    }
}
 
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
Code:
array[i].length
in deiner zweite Schleife?
 
Mein Plan war es durch die ersten 2 Schleifen ein Array mit jeweils 5 unterschiedlichen langen Zeilen also z.B.
Code:
{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
 
Der Fehler liegt hier.
Java:
array= new int [i][randomInt];
Was du suchst ist:
Java:
array[i] = new int[randomInt]

Unterschied: Du überschreibst das gesamte Array .. du willst aber nur das innere Teilarray neu initialisieren.
 
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
Code:
array[i].length
war ein Wink mit dem Zaunpfahl, genau dort wird eine Exception geworfen.
 
Der Fehler liegt hier.
Java:
array= new int [i][randomInt];
Was du suchst ist:
Java:
array[i] = new int[randomInt]

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

Danke hat mir geholfen und mein Problem gelöst. 😀
 

Zurück
Oben