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 weiter 😕

    Es 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();
    	    }
        }
    
    }
    

Anmelden zum Antworten