Ausgabe einer Matrix mit System.out.println

deggit_biber

Aktives Mitglied
Hallo ich habe gerade folgendes Problem.
Ich erstelle mir ein nxn doppeltes Array und lasse es so befüllen, dass es ein magisches Quadrat (Summe der Zeilen und Spalten sind gleich) ergibt. klappt alles. Mein Problem liegt bei der Ausgabe! Ich möchte es per System.out.println ausgeben aber als Matrix. An der Ausgabe sitze ich jetzt schon echt lange aber elegant klappt es nicht, ich hab es unelegant hinbekommen, aber seht am besten selber ;-)

Erstellen des Arrays
Java:
public class magisches_quadrat
{
    private int [][] quad;
    private int n;
 
    magisches_quadrat(int n)              
    {
        this.n = n;
        quad = new int [n][n];
    }
}

Das Array im Sinne des magischen Quadrats befüllen
Java:
public void fuellen()
    {
        int z = 0;
        //int s = 1;
        int s = n / 2;
        int zAlt;
        int sAlt;
     
        for (int i = 1; i <= n*n; i++)    //for-Schleife zum Befüllen
        {
            //Wert in das Quadrat schreiben
            quad[z][s] = i;
         
            //Koordinaten puffern
            zAlt = z;
            sAlt = s;
         
            //Ein hoch und einen nach rechts
            z = z - 1;
            s = s + 1;
         
            //Die drei möglich Fälle durchspielen
            //Fall 1: Oben über den Rand -> In die unterste Reihe springen
            if (z < 0)
            {
                z = n - 1;
            }
         
            //Fall 2: Rechts über den Rand -> In die linke Spalte springen
            if (s > n-1)
            {
                s = 0;
            }
         
            //Fall 3: Im Feld ist bereits eine Zahl -> Zum letzten ausgefüllten Feld und einen Tiefer springen
            if (quad[z][s] != 0)
            {
                //z und s auf die Positionen setzen (bevor "Ein hoch und einen nach rechts" ausgeführt wurde), dann in der Zeile noch einen runter gehen
                z = zAlt + 1;
                s = sAlt;
            }
        }
    }

Ausgabe elegant aber nicht als Matrix (jede Zahl in einer Zeile)
Java:
 public void ausgabe_zeilenweise()
    {
        for (int i = 0; i < quad.length; i++)          //Zeile durchlaufen
        {
            for (int j = 0; j < quad[i].length; j++)          //Spalte durchlaufen
            {
                    System.out.println(quad[i][j]);             
            }
            System.out.println();
        }
    }

Ausgabe als Matrix aber sehr unelegant ;-)
Java:
public void ausgabe2()
    {
        for (int i = 0; i < quad.length; i++)       
        {
            if (n == 3)
            {
                System.out.println(quad[i][0] +" " +quad[i][1] +" " +quad[i][2]);             
            }
            else if (n == 5)
            {
                System.out.println(quad[i][0] +" " +quad[i][1] +" " +quad[i][2] +" " +quad[i][3] +" " +quad[i][4]);             
            }
            else if (n == 7)
            {
                System.out.println(quad[i][0] +" " +quad[i][1] +" " +quad[i][2]+" " +quad[i][3] +" " +quad[i][4] +" " +quad[i][5] +" " +quad[i][6]);             
            }
            else if (n == 9)
            {
                System.out.println(quad[i][0] +" " +quad[i][1] +" " +quad[i][2]+" " +quad[i][3] +" " +quad[i][4] +" " +quad[i][5] +" " +quad[i][6] +" " +quad[i][7] +" " +quad[i][8]);           
            }
            else if (n == 11)
            {
                System.out.println(quad[i][0] +" " +quad[i][1] +" " +quad[i][2]+" " +quad[i][3] +" " +quad[i][4] +" " +quad[i][5] +" " +quad[i][6] +" " +quad[i][7] +" " +quad[i][8] +" " +quad[i][9] +" " +quad[i][10]);            
            }
        }
    }

ihr seht meine Lösung des Problem ist vielleicht kreativ aber nicht schön. Wenn mir da jemand unter die Arme greifen können, wäre ich wirklich sehr dankbar!!!

viele liebe Grüße,
 
Zuletzt bearbeitet von einem Moderator:
Moin,

>> Ich möchte es per System.out.println ausgeben aber als Matrix
Ich bin sicher, Du glaubst damit was gesagt zu haben ..... aber verstehen tue ich es nicht 😕

Gruß Klaus
 
Du könntest in deiner Version "elegant-aber-keine-Matrix" in der inneren Schleife print statt println benutzen.

Falls es println sein muß weil print in der Aufgabenstellung verboten ist, kannst du alternativ in der inneren Schleife einen String mit allen Spaltenergebnissen der aktuellen Zeile aufbauen, den du in der äußeren Schleife ausgibst.
 
Hallo,
danke euch beiden, dass ihr einmal drüber geschaut habt

@Klaus:
Ich meine mit der Ausgabe in einer Matrix sowas
1 5 7
8 9 2
3 4 6

@Meniskusschaden
ja mit print statt println geht es. bis jetzt kannte ich halt nur println
bedeutet das print in diesen Fall, er gibt alles in einer Zeile aus bis das nächste print kommt?
Ich teste das mal ;-)

Danke für die schnelle Hilfe! Ich hab da echt lange dran gesessen und es ist wie immer so einfach!!! Danki
 
print gibt einfach genau das aus was du ihm als parameter gibst. println (kurzform von print line) gibt den übergebenen parameter aus und fügt am ende einen zeilenumbruch ein
 
Bei "print" gibt er einfach alles aus, bei "print" gibt er ebenfalls alles aus aber hängt noch einen Zeilenumbruch hintendran

EDIT: zu spät
 

Neue Themen


Zurück
Oben