Brauche dringend Hilfe!
-
Ich soll ein Java Programm schreiben, welches ein magisches Quadrat mit ungerader Seitenlänge ausgibt (3x3,5x5,7x7,....)
Ich hab zwar einen Ansatz, komme aber nicht weiterEs soll nach diesem Schema programmiert sein:
Man fängt mit der 1 in der 1 Zeile, mittlere Spalte an. Die nächste Zahl kommt immer rechts oben (also zeile+1 spalte+1), falls man aus dem array hinausläuft, muss man genau auf der gegenüberliegenden Seite wieder anfangen.[ ][1][ ]
[ ][ ][ ]
[ ][ ][2]public class magicsquare { public static void main(String args[]){ int n = 5; int magic[][] = new int[n][n]; int z = n-1; //Zeile int s = n/2; //Spalte magic[z][s] = 1; for (int i = 2; i <= n*n; i++) { if(magic[z+1][s+1]==0){ z++; s++; } else { z--; } magic[z][s] = i; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.print(magic[i][j] + " "); } } } }
-
Hi,
so ungefähr passt das ja schon.
Du musst eigentlich nur noch den Seitenwechsel einbauen:public class magicsquare { public static void main(String args[]){ int n = 5; int magic[][] = new int[n][n]; int z = n-1; //Zeile int s = n/2; //Spalte for (int i = 1; i <= n*n; i++) { if (magic[z][s] != 0) { // Eine Zeiel nach oben gehen z--; } magic[z][s] = i; z--; // hoch if (z < 0) { // Falls außerhalb z = n-1; } s++; // rechts if (s == n) { // Falls außerhalb s = 0; } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.print("[" + magic[i][j] + "]\t"); } System.out.println(); } } }