Erste Schritte Zweidimensionales Array - Gerade Zahlen anzeigen lassen

weezy31

Mitglied
Hallo liebe Community,
ich habe nun ein paar Stunden mit dieser Aufgabe verbracht und auch schon versucht über andere Beiträge auf die Lösung meines Problems zu kommen, leider vergeblich.

Aufgabe:
Folgendes zweidimensionales Array ist gegeben. Ausgegeben werden sollen nur die geraden Zahlen (siehe Lösung unten). Außerdem sollen als Schleifen ausschließlich for-Schleifen (for each) verwendet werden.

int[][] data = {
{1, 2, 3, 4, 5, 11, 12, 13},
{6},
{7},
{8, 9, 1, 2, 3, 4, 12, 17, 21, 44}
};

Lösung (sollte so aussehen):

2 4 12
6

8 2 4 12 44

mein Problem:

Ich komme leider nicht weiter als die zweite Zeile. Ab dann erhalte ich immer eine IndexOutOfBounce Fehlermeldung.

2 4 12
6Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at swep.Datensuche.main(Datensuche.java:20)

mein bisheriges Programm:

Java:
public class Datensuche {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
       
        int z = 0;
        int s = 0;
       
        int[][] data = {
                  {1, 2, 3, 4, 5, 11, 12, 13},
                  {6},
                  {7},
                  {8, 9, 1, 2, 3, 4, 12, 17, 21, 44}
        };
           
        for (s=0; s<data[0].length; s++){
            for (z=0; z<data[0].length; z++){
                if(data[s][z]%2==0){
                System.out.format("%5d", data [s][z]);
                }   
            }
            System.out.println();           
        }
    }
}


Vielen Dank schon mal für eure Antworten!
 
Zuletzt bearbeitet:
Du hattest es fast, du musst auf die Länge der jeweiligen Teilarrays achten. Beachte die Schleifenbedingung:
Java:
public class Datensuche {
    public static void main(String[] args) {
        int[][] data = { { 1, 2, 3, 4, 5, 11, 12, 13 }, { 6 }, { 7 },
                { 8, 9, 1, 2, 3, 4, 12, 17, 21, 44 } };
        for (int x = 0; x < data.length; x++) {
            for (int y = 0; y < data[x].length; y++) {
                if (data[x][y] % 2 == 0) {
                    System.out.format("%5d", data[x][y]);
                }
            }
            System.out.println();
        }
    }
}

Zum Besseren Verständnis wie 2D Arrays aufgebaut sind, hilft vielleicht folgendes :
Java:
public class Datensuche {
    public static void main(String[] args) {
        int[][] data = { { 1, 2, 3, 4, 5, 11, 12, 13 }, { 6 }, { 7 },
                { 8, 9, 1, 2, 3, 4, 12, 17, 21, 44 } };
        for (int x = 0; x < data.length; x++) {
            int [] innerArray = data[x];
            for (int y = 0; y < innerArray.length; y++) {
                if (innerArray[y] % 2 == 0) {
                    System.out.format("%5d", innerArray[y]);
                }
            }
            System.out.println();
        }
    }
}

Oder, falls du wirklich "nur" foreach schleifen verwenden möchtest bietet sich folgendes an:
Java:
public class Datensuche {
    public static void main(String[] args) {
        int[][] data = { { 1, 2, 3, 4, 5, 11, 12, 13 }, { 6 }, { 7 },
                { 8, 9, 1, 2, 3, 4, 12, 17, 21, 44 } };
        for (int[] innerArray : data) {           
            for (int i : innerArray) {
                if (i % 2 == 0) {
                    System.out.format("%5d", i);
                }
            }
            System.out.println();
        }
    }
}
 
Hi,
Du hast ein 2dim- int Array deklariert.
Die IndexOutOfBoundsException kommt daher, weil äusserer for-loop eine falsche Abbruchbedingung hat:
Code:
for (s=0; s<data.length; s++){
   for (z=0; z<data[s].length; z++){
      // mach was 
   }
}
Der äussere for-loop iteriert über die 1.Dimension vom 2D Array.
Der innere for-loop iteriert über die 2.Dimension.
 
Vielen Dank!
Eine Frage noch, mein s steht ja für die Spalten und z für die Zeilen.

Java:
for (s=0; s<data.length; s++){
            for (z=0; z<data[s].length; z++){

Warum muss z<data(s).length sein?
 
Zuletzt bearbeitet:

Zurück
Oben