Magisches Quadrat - wie bring ich des fertig?

Status
Nicht offen für weitere Antworten.

etoile

Neues Mitglied
Hey Ihr, brauche ganz ganz dringend Hilfe.
Mal kurz die Aufgabe:

Dieses Quadrat aus den Zahlen 1 – 9 ist ein „magisches Quadrat“, da die Zeilensummen, die Spaltensummen und die beiden Diagonalsummen gleich sind.
Schreiben Sie zur Klasse ”matrix” eine Methode ”magischesquadrat()”, die bei
ungerader, gleichgroßer Zeilen- und Spaltenzahl n ein magisches Quadrat erzeugt
aus den Zahlen 1 – n².
Schreiben Sie ein geeignetes Hauptprogramm, um die Methode zu testen.
Ausgabe: Das magische Quadrat
Hinweis: Besetze die Mitte der ersten Zeile mit der Zahl 1.
Für alle weiteren i Zahlen gilt:
Gehe eine Zeile nach oben und eine Spalte nach rechts
korrigiere ggfs. die Position
solange die Position schon besetzt ist,
gehe eine Spalte nach links und zwei Zeilen nach unten und korrigiere
ggfs. die Position
besetze nun diese Position mit i
„korrigiere Position“ heißt, dass sowohl Zeilen- als auch Spaltenindex
im Bereich 0 bis n-1 liegen muss; zu einem Index < 0 muss n addiert
werden, von einem Index > n-1 muss n subtrahiert werden.
Verwenden Sie hierzu eine Methode „private void korrektur()“!

Und hier meine bisherige Lösung:

Code:
public class matrix {

	private double m[][] = new double[10][10];
	private int zeile,spalte;
	private int q[][];
	
	public matrix(int z,int s) {
		zeile=z;
		spalte=s;
		if (zeile<0 || zeile >10 || spalte<0 || spalte>10)
			System.out.println("Bitte geben Sie nur Zahlen zwischen 1 und 10 ein.");
	}

	public void wert(double w, int z, int s) {
		m[z][s] = w;
	}

	public void reset(double f) {
		for (int i=0;i<zeile;i++)
			for (int j=0;j<spalte;j++)
				m[i][j]=f;
	}

	public void ausgabe() {
		for (int i=0;i<zeile;i++){
			System.out.println();
			for (int j=0;j<spalte;j++)
				System.out.print(q[i][j]+" ");
		}
	}
[b]wobei dieser teil natürlich der interessanteste ist![/b]	
	public matrix(int n){
		if (n>2 && n%2==1){
			zeile=spalte=n;
			q = new int[zeile][spalte];
			for (int i=0;i<zeile;i++)
				for (int j=0;j<spalte;j++)
					q[i][j]=-1;
			int z1=0;
			int s1=n/2;
			int z=1;
			q[z1][s1]=1;
			for (z=2;z<=n*n;z++){
				q[z1][s1]=z;
				z1--;
				s1++;
				if (z1<0){
					z1+=n;
				}
				if (z1>=n){
					z1-=n;
				}
				if (s1<0){
					s1+=n;
				}
				if (s1>=n){
					s1-=n;
				}
			}
			
		}
		else System.out.println("Bitte geben Sie eine natürliche ungerade Zahl größer gleich 3 ein.");
	}

}


Ich hoffe mir kann da jemand weiterhelfen benötige die lösung wirklich sehr sehr schnell!
Vielen Dank im Voraus!!!
 
S

SlaterB

Gast
is ja witzig dass das so leicht geht, aber ist wohl nur eins von vielen möglichen Quadraten

Code:
public class MagQuadrat {

	private int n;
	private int z;
	private int s;
	private int[][] q;

	public MagQuadrat(int newN) {
		if ((newN < 3) || (newN % 2 == 0)) {
			System.out.println("Mit n = "+newN+" ist kein magisches Quadrat "+
				"garantiert,\nbitte geben Sie eine natürliche ungerade "+
				"Zahl größer 2 ein.");
		}
		n = newN;
		q = new int[n][n];
	}

	public void ausgabe() {
		int[] sSum = new int[n];
		int zSum = 0;
		int wert = 0;
		int dLORU = 0;
		int dLURO = 0;
		
		for (int i = 0; i < n; i++) {
			System.out.println();
			zSum = 0;
			for (int j = 0; j < n; j++) {
				wert = q[i][j];
				if (i == j) {
					dLORU += wert;
				}
				if (j == (n-1-i)) {
					dLURO += wert;
				}

				zSum += wert;
				sSum[j] += wert;
				System.out.print(blockschrift(wert,5) + " ");
			}
			System.out.print("  "+zSum);
		}
		System.out.println();
		System.out.println();

		for (int i = 0; i < n; i++) {
			System.out.print(blockschrift(sSum[i],5) + " ");
		}

		System.out.println();
		System.out.println();
		System.out.println("Diagonal l.o. nach r.u.: "+dLORU);
		System.out.println("Diagonal l.u. nach r.o.: "+dLURO);


	}

	/* gibt einen String der Laenge length zu einer Zahl k */
	private String blockschrift(int k, int length) {
		String st = ""+k;

		if (length < 2) {
			return st;
		}
		if (st.length() > length) {
			st = st.substring(0,length-2)+"..";
		} else {
			while (st.length() < length) {
				st = " "+st;
			}
		}
		return st;
	}


	private void korrektur() {
		if (z < 0) {
			z += n;
		} else if (z >= n) {
			z -= n;
		}
		if (s < 0) {
			s += n;
		} else if (s >= n) {
			s -= n;
		}
	}

	public void magischesquadrat() {
		if ((n < 3) || (n % 2 == 0)) {
			System.out.println("n: "+n+", Bitte benutzen sie ein Objekt mit "+
				"einer natürliche ungerade Zahl größer 2 ein.");
			return;
		}		
		
		z = 0;
		s = n/2;
		q[z][s] = 1;
		
		int max = n*n;
		for (int i = 2; i <= max; i++) {
			z--;
			s++;
			korrektur();

			while (q[z][s] != 0) {
				z += 2;
				s--;
				korrektur();
			}
			q[z][s] = i;
		}
	}
	
	public static void main(String[] args) {
		MagQuadrat mq = new MagQuadrat(17);
		mq.magischesquadrat();
		mq.ausgabe();
		
	}

}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Input/Output Magisches Quadrat Rechts Formatieren Java Basics - Anfänger-Themen 4
L Magisches Quadrat und Backtracking Java Basics - Anfänger-Themen 19
S Magisches Quadrat Java Basics - Anfänger-Themen 9
G Magisches Dreieck Java Basics - Anfänger-Themen 2
A 2D Array Magisches Viereck Java Basics - Anfänger-Themen 4
L Magisches Viereck - Probleme mit Arrays Java Basics - Anfänger-Themen 3
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
MaZ Quadrat Schleife(Pyramide) Java Basics - Anfänger-Themen 9
xXDasFischXx quadrat Java Basics - Anfänger-Themen 1
F Quadrat Mit Muster Java Basics - Anfänger-Themen 15
J Quadrat mit Diagonalen Java Basics - Anfänger-Themen 3
J Einfaches Quadrat auf der Console ausgeben lassen Java Basics - Anfänger-Themen 7
K Erste Schritte Nenner zum Quadrat Java Basics - Anfänger-Themen 10
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
S math Methoden in Java (quadrat) Java Basics - Anfänger-Themen 7
F Das magische Quadrat Java Basics - Anfänger-Themen 8
J Negatives Quadrat bei hohen Basen Java Basics - Anfänger-Themen 11
F Rechteck/Quadrat getroffen? Java Basics - Anfänger-Themen 2
K Rechteck/Quadrat Java Basics - Anfänger-Themen 5
P Quadrat und Wurzel HILFE!!!!! Java Basics - Anfänger-Themen 13
T Quadrat mit Array?? Java Basics - Anfänger-Themen 9
G Quadrat in Java Java Basics - Anfänger-Themen 9
J Quadrat mit variabler Kantenlänge Java Basics - Anfänger-Themen 3
G Quadrat mit Diagonalen ausgeben Java Basics - Anfänger-Themen 4
K Farbenspiel : Quadrat verschwindet,wenn Fenster inaktiv ist Java Basics - Anfänger-Themen 13
D Wie bring ich die Klassen dazu sich richtig zu "kennen& Java Basics - Anfänger-Themen 2
G Taschenrechner.aber Rechnen bring ich nicht zam! Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben