Mehrdimensionale Arrays (Haupt- und Nebendiagonale)
-
Guten Tag Community,
habe ein Frage bezüglich mehrd. Arrays in Java, besser gesagt ein Verständnisproblem bei folgendem Code, dieser auch einwandfrei funktioniert, nur verstehe ich ihn nicht so recht:
public static void outputHD(int[][] values) { int z; int s; int startz; int starts; for(starts = 0; starts < values[0].length ;starts++) { for(s = starts, z = values.length - 1; z >= 0 && s >= 0 ;z--,s--) { System.out.print(values[z][s] + " "); } System.out.println(); } for(startz = values.length - 2; startz >= 0; startz--) { for(z = startz, s = values[0].length - 1; z >= 0 && s >= 0 ;z--,s--) { System.out.print(values[z][s] + " "); } System.out.println(); } }
Der Code gibt mir die Hauptdiagonalen aus:
13 14 9 15 10 5 16 11 6 1 12 7 2 8 3 4
Nur leider verstehe ich nach mehrstündigem Sitzen, den Ablauf dieser Schleifen nicht bzw. wie sie angeben in welche Richtung ich mich bewege.
-
Stift und Papier sind dein Freund
Nehmen wir mal an, du über gibst folgenden Array als `values{/c] Parameter:
[java]int[][] values = new int[][] {
{ 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 15, 16 }};[/java]
Zunächst kommst du in die erste for-Schleife, bei der values[0].length == 4 ist, also läuft [c]starts` von 0 bis 3.
starts = 0:
s = 0 (weil starts == 0), z = 4 (values.length == 4)
z >= 0 ist wahr, s >= 0 ist wahr => Schleife durchlaufen
--> Ausgabe '13'
z = 3, s = -1
z >= 0 ist wahr, s >= 0 ist falsch => Schleife nicht durchlaufen
--> Neue Zeilestarts = 1:
s = 1, z = 4
z >= 0 ist wahr, s >= 0 ist wahr => Schleife durchlaufen
--> Ausgabe '14'
z = 3, s = 0
z >= 0 ist wahr, s >= 0 ist wahr => Schleife durchlaufen
--> Ausgabe '9'
z >= 0 ist wahr, s >= 0 ist falsch => Schleife nicht durchlaufen
--> Neue ZeileUnd so weiter. Die obere äußere for-Schleife läuft dann, bis '16 11 6 1' ausgegeben wird, danach übernimmt die untere for-Schleife den Rest.
-
Besten Dank! Nun ist es mir um einiges klarer geworden, vorallem wenn man sich die Dinge aufzeichnet