Home
/
JavaForum
/
Beginner
Infos
|
Features
|
Gold-Edition
|
Kundenservice
java
Übersicht
Forum
-
Beginner
-
Java allgemein
-
JDBC
-
JNI
-
Networking
-
Online-Ressourcen
-
Swing + AWT
-
XML
-
Meckerecke
Mitglieder
LOGIN
User oder E-Mail
Passwort
·
Passwort vergessen
·
Kostenlos anmelden
Information
Demo
Features
Im Vergleich
Anmeldung
SUCHE
Beiträge, Foren oder Verfasser finden:
Kundenservice
Impressum
Datenschutz
AGB
Status
4.764 User online
1 User eingeloggt
Beiträge
Beginner
Java allgemein
JDBC
JNI
Networking
Online-Ressourcen
Swing + AWT
XML
Meckerecke
Antworten
Neuer Beitrag
Gesamtdarstellung
Detaildarstellung
Einzeldarstellung
Threaddarstellung
Beitrag 46 von 2963 (2%)
Autor
Heiko Kraus
Datum
03.12.05, 15:13
Betreff
Wie mach ich hier weiter? - magisches Quadrat
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:
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]+" ");
}
}
wobei dieser teil natürlich der interessanteste ist!
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!!!
Auf diesen Beitrag antworten
Neuen Beitrag verfassen
Impressum
·
Datenschutz
·
AGB
·
Infos
·
Presse
Ein modernes Forum:
teamturn.com