2016-11-03 8 views
0

Ich suche, die Ausgabe dieses Codes zu formatieren, so dass die Summen der Zeilen und Spalten neben/unter der Reihe/Spalte erscheinen. Ich bekomme die Zahlen korrekt, aber Leerzeichen und Anzahl der Zeichen scheinen zu unberechenbar zu sein, um sie korrekt für jedes Quadrat zu formatieren. Hier ist der Code, den ich derzeit habe.Dieses magische Quadrat formatieren

public void printSquare() 
{ 
    for (int x = 0; x < square.length; x ++) 
    { 
     System.out.println(); 
     for (int j = 0; j < square.length; j++) 
     { 
      System.out.print(" " + square[x][j]); 
     } 
     System.out.println(" | " + sumRow(x)); 

    } 
    System.out.print(sumOtherDiag()); 
    for (int x = 0; x < square.length; x ++) 
    { 
     System.out.print(" ^"); 
    } 
    System.out.println(sumMainDiag()); 
    for (int x = 0; x < square.length; x ++) 
    { 
     System.out.print(" " + sumCol(x)); 
    } 
} 

Und die Ausgabe dafür ist ..

8 1 6 | 15 

    3 5 7 | 15 

    4 9 2 | 15 
15 ^^ ^15 
    15 15 15 

Gibt es Strategien, um zuverlässiger so etwas wie dieses formatiert werden?

+0

http://StackOverflow.com/Questions/22416578/How-to-use-string-format-in-java Verwenden Sie 'String.format', da Sie damit Abstände in fester Breite erzielen können. – Compass

+0

Die andere Sache, die Sie tun könnten: Es beginnt wahrscheinlich mit der Tatsache, dass "8" ist ein Char weniger als "15" ... so könnten Sie auch Ihre einstelligen Zahlen als "08" zum Beispiel drucken. Dann müssen Sie sich weniger Gedanken über Abstände machen. Aber wenn Sie herausfinden, wie man mit führenden Nullen "formatiert", könnten Sie auch mit einem zusätzlichen Leerzeichen formatieren ... – GhostCat

Antwort

0

Statt

System.out.printf(" " + square[x][j]); 

Verwendung

System.out.printf("%4d", square[x][j]); // 4 positions for right-aligned decimal 

und so weiter für andere ähnliche Aussagen.