Das magische Quadrat

fr0st

Mitglied
Hallo zusammen. :)
Ich hab ein kleines Problemchen.
Ich muss von der Schule her ein Programm schreiben, dass ein magisches Quadrat generiert.
Die Grösse des Quadrates ist n(Eingabe). Leider funktioniert es aber nicht. Hier der Quelltext.
Ich hoffe ihr könnt mir helfen.

Java:
package kapitel4;
import javax.swing.*;

public class MagischesQuadrat {

	public static void main(String[] args) {
		
		// Abfrage für die grösse des magischen Quadrates
		
		String Eingabe = JOptionPane.showInputDialog ("Ungerade Zahl zwischen 1 und 10 eingeben: ");
		int n = Integer.parseInt(Eingabe);
		
		// Kontrolle, ob es die richtige Zahl ist
		
			if(n>2 && n<10 && n%2 != 0) {
            JOptionPane.showMessageDialog (null, "Magisches Quadrat wird berechnet!");
            	}
			
            else {
            	JOptionPane.showMessageDialog (null, "Error");
				JOptionPane.showMessageDialog (null, "Bitte starten sie das Programm neu.");
				System.exit (0);
            	}

			// Initialisieren des Arrays
			
			int Quadrat[][] = new int [n][n];
			int zeile = ((n/2)+1);
			int spalte = (n/2);
			Quadrat[zeile][spalte] = 1;
			
			
			
			
			
			// Einfüllen der Zahlen
			
			for (int i = 1; i == n; i++) {
				Quadrat[zeile][spalte] = i;
				spalte++;
				zeile--;
				
				if (zeile < 0) {
				zeile = (n-1);
				}
				
				if (spalte == n) {
				spalte = 0;
				}
				
				if (Quadrat[zeile][spalte] == 0){
				zeile++;
				spalte++;
				 
				 if (zeile == n) {
				 	zeile = 0;
				 }
				 
				 if (spalte == n) {
				 	spalte = 0;
				 }
				}
			}
			
			
			
			
			// Ausgabe des Magischen Quadrates
			
	         for (int i2 = 0; i2 < Quadrat.length; i2++) {
	               for (int j = 0; j < Quadrat.length; j++)
	                
	                   System.out.print("\t" + Quadrat[i2][j]);
	               
	              System.out.println(" ");
			
			
	         }
		}
}


Liebe Grüsse fr0st
 

fr0st

Mitglied
Das Einfüllen der Zahlen.
Also im Abschnitt //Einfüllen der Zahlen.
Wenn ihr wollt kann ich euch die GedankenVorlage abschreiben.
Algorhitmus und so.
 

Maskin

Mitglied
Du solltest dir das Füllen nochmal überlegen...
Du hast eine Schleifen Bedingung auf i von 1 bis Eingabe, prüfst in der Schleife aber immer auf Zeile und Spalte. --> d.h. du befüllst hier entweder nur eine Zeile oder Spalte, je wie du das sehen willst :)
Um hier durch alle Felder zu kommen solltest du entweder eine zweite Schleife verwenden wie bei der Ausgabe, oder du überlegst dir eine Methode die du rekursiv aufrufst bis das Quadrat befüllt ist.

Außerdem ist deine solltest du hier die bedingung auf
Java:
i<=n
ändern ;)
 
Zuletzt bearbeitet:

fr0st

Mitglied
Guten Abend :)
Erstmal Danke für die schnelle Antwort.
Durch das ändern der Abbruchbedingung hat er jetzt wenigstens eine (1) Zeile befüllt mit gemischten Zahlen von 1 - 5. Das ist doch schonmal ein Fortschritt :rtfm::bloed:

Wie stellst du dir das befüllen mit zwei Schleifen vor?
Ich bin recht neu in der "Java-Szene" und kann mir überhaupt nichts darunter vorstellen.

Könntest du mir ein Beispiel machen und anhand davon erklären?

lg fr0st
 

FaJo

Mitglied
Java:
for (int i = 0; i < row; i++) {
        for (int j = 0; j < column; j++) {
				Array[i][j] = '0';

	}

}
Hier ein Beispiel ;)
Versuche es mal zu erklären...
Also du gehst mit den jeweiligen Schleifen durch die Reihen bzw. Spalten(Die du vorher initialisiert hast) und setzt in diesem Fall bei jedem Koordinatenpaar eine '0'.
 

geqoo

Bekanntes Mitglied
Ich visualisiere das mal ein bisschen.

Du willst ja ein Quadrat erzeugen, also so eine Struktur hier:

Code:
x x x x
x x x x
x x x x
x x x x

Das Ganze stellen wir uns also 2-Dimensional vor. Es gibt Zeilen (die wir mal mit i betiteln) und Spalten (die wir mal mit j betiteln)
Jetzt wird das ganze wie ein Koordinatensystem zusammen gesetzt, sodass folgende Struktur heraus kommt:

Code:
  1 2 3 4
1 x x x x
2 x x x x
3 x x x x
4 x x x x

So. Da wir nun immer bei den Zeilen anfangen, haben wir sie i genannt (weil i vor j kommt :bloed:) und danach kommen eben die Spalten j.
Wie du an dem Raster jetzt sicher sehen kannst, kann man jedes Feld über die Zeile + Spalte eindeutig identifizieren.

Genau das macht die Schleife von FaJo.
Das hat übrigens noch nichts mit Java zutun, sondern ist nur ein bisschen Mathematik mit mehrdimensionalem Denken :)
 
Zuletzt bearbeitet:

fr0st

Mitglied
N'Abend :)
Ich habs jetzt doch per while-Schlaufe gemacht. War ziemlich easy ab dem Moment als ich es gecheckt habe ;)
Ist das ein akzeptabel geschriebenes Programm :p?
Java:
package kapitel4;
import javax.swing.*;

public class MagischesQuadrat {

	public static void main(String[] args) {
		
		// Abfrage für die grösse des magischen Quadrates
		
		String Eingabe = JOptionPane.showInputDialog ("Ungerade Zahl zwischen 1 und 10 eingeben: ");
		int n = Integer.parseInt(Eingabe);
		
		// Kontrolle, ob es die richtige Zahl ist
		
			if(n%2 != 0) {
            JOptionPane.showMessageDialog (null, "Magisches Quadrat wird berechnet!");
            	}
			
            else {
            	JOptionPane.showMessageDialog (null, "Error");
				JOptionPane.showMessageDialog (null, "Bitte starten sie das Programm neu.");
				System.exit (0);
            	}
			 
			// Initialisieren des Arrays
			
			int Quadrat[][] = new int [n][n];
			int zeile = ((n/2)+1);
			int spalte = (n/2);
			Quadrat[zeile][spalte] = 1;
			
			
		//Einfüllen der Zahlen
			
			int i = 1;
			while (i <= (n*n)) {
				
				Quadrat[zeile][spalte] = i;
				spalte++;
				zeile--;
				
				
				if (zeile < 0) {
				zeile = (n-1);
				}
				
				if (spalte == n) {
				spalte = 0;
				}
				
				if (Quadrat[zeile][spalte] != 0){
				zeile++;
				spalte++;
				 
				 if (zeile == n) {
				 	zeile = 0;
				 }
				 
				 if (spalte == n) {
					 spalte = 0;
				 }
				 
				}
				i++;
				
			}
			
			
			
			
			// Ausgabe des Magischen Quadrates
			
	         for (int i2 = 0; i2 < Quadrat.length; i2++) {
	               for (int j = 0; j < Quadrat.length; j++)
	                
	                   System.out.print("\t" + Quadrat[i2][j]);
	               
	              System.out.println(" ");
			
			
	         }
		}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Magische Quadrate Java Basics - Anfänger-Themen 2
D Magische Quadrate Java Basics - Anfänger-Themen 7
Ü 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
C Input/Output Magisches Quadrat Rechts Formatieren Java Basics - Anfänger-Themen 4
S math Methoden in Java (quadrat) Java Basics - Anfänger-Themen 7
J Negatives Quadrat bei hohen Basen Java Basics - Anfänger-Themen 11
L Magisches Quadrat und Backtracking Java Basics - Anfänger-Themen 19
S Magisches Quadrat Java Basics - Anfänger-Themen 9
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
E Magisches Quadrat - wie bring ich des fertig? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben