Array mit Werten belegen

Lestas89

Bekanntes Mitglied
Ich habe eine Frage zum folgenden Programm:

Java:
class Programm{

  public static void main (String args[]){
  int a[][];
  a = new int[5][4];
  int zaehler = 1;

  for (int i = 0; i < a.length ; i++)
     for (int j = 0; j < a[i].length;j++){
       a[i][j] = zaehler;
       zaehler++;
       }
    
  
     for (int i = 0; i < a.length; i++){
  for (int j = 0; j < a[i].length;j++){
       System.out.print(a[i][j]+"\t");
  }
  System.out.println();

     }
     }
}

Kann mir einer erklären wieso die mittlere verschachtelte for-Schleife das Array mit Werten von 1 bis 20 belegt?

Meine Idee: Es handelt sich um eine 5x4 Matrix. Also mit 5 Zeilen, 4 Spalten gleich 20 Feldern.
zaehler wird dann so lange erhöht, bis alle Felder voll besetzt sind. Ist das richtig?

Ich hätte außerdem noch eine Frage zu der Verschachtelung, die ich bisher einfach so hingenommen habe: for (int j = 0; j < a.length;j++
was genau sagt mir a.length aus?
 
Zuletzt bearbeitet von einem Moderator:
Es ist eine gemeinschaftsproduktion der äußeren und der inneren for-schleife
Da du zwei koordinaten für den zugriff auf ein feld in einer matrix brauchst liefert die die äußere einen und die innere den anderen.
Mit a[ i][ j] greifst du auf die zelle zu und mit =zaehler; weisst du der zelle einen/den wert zu.

Die anderen for-schleifen brauchst du nicht, da alles in der inneren for-schleife abgearbeitet werden kann.

ich schreib das immer gerne so, vlt wird es so klarer.
Java:
for( int row =0; row <a.length; ...){
  for( int col =0; col <a[ row].length; ...){
    a[ row][ col] =zaehler;
    zaehler++;
    System.out.print(a[j]+"\t");
  }
  System.out.println("");
}
 
Zuletzt bearbeitet:
Hallo Strußi, danke für deine Antwort.
Ich versteh aber immer noch nicht was sich genau hinter a.length in der Verschachtelung versteckt.
Ich versuch es zu verstehen aber irgendwie tu ich mich schwer damit.
 
aha,
das ist ganz einfach
Java:
a.length =anzahl der felder des array a //eindimensional
int[] a =new int[ 8];
a.length =8;

a[ row] .length = anzahl der felder in einem geschachtelten array //zweite dimension
int[][]a =new int[ 5][ 4];
a.length =5;
a[ row] =4;

Es gibt auch arrays die nicht immer gleich viele spalten haben, da ist es sinnvoll mit .length zu arbeiten, sonst kommt indexOutOfBounceException ;-) überschreitung der grenzen
 
Zuletzt bearbeitet von einem Moderator:
Danke für deine Antwort. Aber mein Verständnisproblem will leider nicht verschwinden.
Code:
for (int i = 0; i < a.length ; i++)
     for (int j = 0; j < a[i].length;j++)

Angenommen ich habe jetzt eine 5 X 7 Matrix. Wie kann ich mir dann die Verschachtelung erklären? Dann würde ja da stehen j < 5. Wie kann dann eine 5 X 7 Matrix zustande kommen? Da liegt mein Verständnisproblem. Ich versteh die forschleife nicht, bzw das a.length nicht.
 
Zuletzt bearbeitet:
die erste(äußere) for-schleife ist NUR für den zeilenindex verantwortlich
die zweite(innere) for-schleife ist NUR für den spaltenindex verantwortlich

du fragst nicht zweimal a.length ab sondern
a.length in der äußeren schleife
a[ i].length in der inneren = gib mir die spaltenzahl der i-ten zeile

die erste for-schleife läuft über die reihen und fängt bei 0 an
also ist i für den ersten durchlauf immer 0
dann kommt die zweite schleife fängt auch bei 0 an und erhöht sich solange bist es bei a[ i].length-1 ist
also werte von 0-6
somit hast du den zugriff auf die erste zeile und alle ihre spalten
dann wird die erste forschleife erhöht i =1;
zweite for-schleife 0 -6
zweite reihe mit allen spalten
das spiel geht so weiter bis du bei a.length-1 angelangt bis.

vielleicht hilft dir das weiter
du kannst dir das ganze auch als sortierkasten vorstellen
41ugsyVkoOL._SY300_.jpg

du hättest einen int[][] matrix mit unterscheidlich langen felder
mit matrix.length kannst du diezeilenzahl (3) erfragen
und mit matrix[ zeile] frägst du die einzelen zeilenlängen ab ( 6; 3; 2 oder 3 oder 4)

die äußere schleife gibt die den zeilenindex
die innere den spaltenindex
 
Klasse. Danke dir für deine Mühe. Das räumt erstmal mein Problem aus dem Weg. Sollten noch weitere Fragen sein, melde ich mich 🙂
 

Zurück
Oben