# Magisches Quadrat



## sajodino (11. Jan 2012)

Hi erstmal!
Meine Kommilitonen und Ich kommen nicht weiter bei der Aufgabe MagischesQuadrat.
Unsere Aufgabe ist es ein Magisches Quadrat ( 4x4 ) zu erstellen.
Die Initia
lisierung haben wir bereits so wie die Ausgabe. Jedoch fehlt uns der Code für die Berechnung um die Zahlen zufällig und einmalig in das Quadrat einzusetzen. 3 Zahlen sind gegeben :

0,0,0,0
0,12,0,0
0,0,0,0
0,15,14,0

Diese Zahlen sollen auch nicht überschrieben werden.

Hoffe ihr könnt uns iwie weiterhelfen

Hier der Code:

```
package project1;

import javax.swing.JOptionPane;

public class Class1 {
public Class1() {
super();
}
final static int MAX = 13;

public static void main(String[] args) {
Class1 class1 = new Class1();
int iQuadrat[][] = new int [4][4];


for (int zeile=0; zeile <iQuadrat.length;zeile++)
{
for (int spalte=0;spalte<iQuadrat[zeile].length;spalte++)


iQuadrat[1][1]=12;
iQuadrat[3][1]=15;
iQuadrat[3][2]=14;
} // GERÜST
// Zeilensummen berechnen und ausgeben
int[] zeilensumme = new int[4];
for (int zeile =0; zeile < 4; zeile++)
{
for (int spalte = 0; spalte < 4; spalte++)
{
zeilensumme[zeile] += iQuadrat[zeile][spalte];
System.out.print(iQuadrat[zeile][spalte] + "\t");
}
System.out.println(zeilensumme[zeile]);
}

// Spaltensummen berechnen und ausgeben
int[] spaltensumme = new int[4];
for (int spalte = 0; spalte < 4; spalte++)
{
for (int zeile = 0; zeile < 4; zeile++)
{
spaltensumme[spalte] += iQuadrat[zeile][spalte];
}
System.out.print(spaltensumme[spalte] + "\t");
}
System.out.println();
}
}
```


----------



## Sonecc (11. Jan 2012)

Da ist ein riesengroßer roter Text über dem eingabefeld und du schaffst es den zu übersehen. Sorry, aber da wundert mich dann nichts mehr ...


----------



## sajodino (11. Jan 2012)

Hi Sonecc,
bei uns gibt es keinerlei Fehlermeldungen. Wir haben eine Ausgabe in der ein Quadrat mit den Zahlen angeziegt wird.

Gruss


----------



## Plopo (11. Jan 2012)

Solltest du nach einer Lösung suchen X Zahlen zufällig zu "ziehen", welche einmalig sind.

Such mal nach "Lotto", hier gibt es hunderte Threads davon.


----------



## sajodino (11. Jan 2012)

Hi,
das einfügen der Zufallszahlen aus Lotto hatten wir schon probiert und es funktionierte nicht.

Die Ausgabe blieb gleich, uns fehlt das reinschreiben in das 2D-Array

Gruss


----------



## SlaterB (11. Jan 2012)

strukturiert vorzugehen wäre sicher besser als mit Zufall, im ersten Feld erst 1, dann 2, 3 usw. ausprobieren, in weiteren Feldern ebenso sortiert alle Möglichkeiten durch,
ganz leicht ist das gewiss nicht, kommt Rekursion in Frage?

vielleicht bietet sich ein 16er eindimensionales Array an, oder zur Übung erstmal nur ein 3er-Array, auch ohne dass etwas schon befüllt ist,
alle Kombinationen 1,2,3,-  1,3,2 - 2,1,3 usw. durchgehen, ist dahingehend etwas möglich?

> um die Zahlen zufällig und einmalig in das Quadrat einzusetzen. 

ok, doch Zufall, was sollte am Einsetzen so schwer sein? wiederum könnte eine Dimension es vereinfachen,
sonst eben zwei Indexe merken, verwenden, erhöhen


----------



## sajodino (11. Jan 2012)

Also wo muss dann der Code eingesetzt werden und wie heisst dieser ?  Soweit ich weiss ist das der Code um Zufallszahlen zu generieren : int a = (int) Math.round(Math.random()*(16));

Aber leider wissen wir nicht wo und was noch eingesetzt werden muss.. Alle Versuche schlugen fehl ...

Gruss


----------



## Firephoenix (11. Jan 2012)

Einige Fragen zur Aufgabe an sich:

1. Ist hier das klassische Magische Quadrat gemeint mit den Regeln SpaltenSumme = ZeilenSumme = DiagonalSumme? Oder reichen Spalten und Zeilen aus

2. Ich gehe davon aus die 3 Zahlen sollen fest sein und alle 0er dürfen geändert werden?

3. Was hat es mit dieser mysteriösen MAX=13 auf sich?

4. Habt ihr einen Ansatz wie ihr die Aufgabe auf dem Papier lösen würdet?

5. Habt ihr eine Codevorlage oder Einschränkungen, dass ihr irgendwelche Klassen von Java nicht verwenden dürft?

Btw: Versuchen bis es klappt entspricht der Arbeitsweise "Puzzel in die Luft werfen bis ein Bild da ist" - die Figur in dem Beispiel ist im Normalfall ein Affe und kein Student 

Gruß


----------



## HimBromBeere (11. Jan 2012)

Ob es sich nun um ein echtes oder ein unechtes handelt, spielt meiner Meinung nach keine Rolle, mit einfach mal probieren ist es halt nicht geten, das könnte ein wenig dauern. Im Endeffekt läuft es doch aber nur auf ein lineares Gleichungssystem mit fünf Unbekannten heraus (bei einem 3x3 Quadrat), weil die ersten vier Zahlen frei wählbar sind (wenn ich mich jetzt nicht völlig vertue). Doie restlichen fünf Felder ergeben sich durch einfache Addition der bereits vorhandenen, also kommen wahrscheinlich nichtmal 5unbekannte raus, sondern nur 4 oder so... hab´s nie praktisch durchgerechnet... war jetzt nur eine theoretische Analyse des Problems.

EDIT: Da es sich um ein 4x4-Quadtrat handelt, ist der Tip hinfällig, da müsste man mal durchrechnen, wie viele Parameter da unbekannt sind und welche man wählen kann...


----------

