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 Zeile

    starts = 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 Zeile

    Und 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 🙂


Anmelden zum Antworten