2016-11-03 2 views
0

Je cherche à mettre en forme la sortie de ce code afin que les totaux des lignes et des colonnes apparaissent à côté/en dessous de cette ligne/colonne. J'obtiens les nombres corrects, mais les espaces et les comptes de chars semblent être trop imprévisibles pour le formater correctement pour n'importe quel carré de taille. Voici le code que j'ai actuellement.Formatage de ce carré magique

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)); 
    } 
} 

Et la sortie en est ..

8 1 6 | 15 

    3 5 7 | 15 

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

Existe-t-il des stratégies afin de mettre en forme plus fiable quelque chose comme ça?

+0

http://stackoverflow.com/questions/22416578/how-to-use-string-format-in-java Essayez d'utiliser 'String.format' car cela vous permet de faire un espacement de largeur fixe. – Compass

+0

L'autre chose que vous pourriez faire: cela commence probablement par le fait que "8" est un caractère de moins de "15" ... donc vous pouvez également imprimer vos numéros à un chiffre comme "08" par exemple. Ensuite, vous devez vous soucier moins de l'espacement. Mais quand vous imaginez comment "formater" avec des zéros, vous pouvez aussi formater avec un espace supplémentaire ... – GhostCat

Répondre

0

Au lieu de

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

utilisation

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

et ainsi de suite pour d'autres déclarations similaires.