J'ai un problème avec un tableau à deux dimensions. Je vais avoir un affichage comme ça:
1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 . . . etc
Ce que je veux au fond, c’est d’afficher pour le montrer comme
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20
21 22 23 24 ... etc
Voici mon code:
int twoDm[][]= new int[7][5];
int i,j,k=1;
for(i=0;i<7;i++){
for(j=0;j<5;j++) {
twoDm[i][j]=k;
k++;}
}
for(i=0;i<7;i++){
for(j=0;j<5;j++) {
System.out.print(twoDm[i][j]+" ");
System.out.print("");}
}
public class FormattedTablePrint {
public static void printRow(int[] row) {
for (int i : row) {
System.out.print(i);
System.out.print("\t");
}
System.out.println();
}
public static void main(String[] args) {
int twoDm[][]= new int[7][5];
int i,j,k=1;
for(i=0;i<7;i++) {
for(j=0;j<5;j++) {
twoDm[i][j]=k;
k++;
}
}
for(int[] row : twoDm) {
printRow(row);
}
}
}
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
26 27 28 29 30
31 32 33 34 35
Bien sûr, vous pouvez échanger les 7 & 5 comme mentionné dans d'autres réponses, pour obtenir 7 par ligne.
Vous devez imprimer une nouvelle ligne après chaque ligne ... System.out.print("\n")
, ou utiliser println
, etc. En l’état, vous n’imprimez rien - System.out.print("")
, remplacez print
par println
ou ""
par "\n"
.
Si cela ne vous dérange pas des virgules et des crochets, vous pouvez simplement utiliser:
System.out.println(Arrays.deepToString(twoDm).replace("], ", "]\n")));
Vous pourriez écrire une méthode pour imprimer un tableau 2D comme ceci:
//Displays a 2d array in the console, one line per row.
static void printMatrix(int[][] grid) {
for(int r=0; r<grid.length; r++) {
for(int c=0; c<grid[r].length; c++)
System.out.print(grid[r][c] + " ");
System.out.println();
}
}
Je posterai une solution avec un peu plus de détails, en plus du code, car l'erreur initiale et les erreurs suivantes qui ont été démontrées dans les commentaires sont des erreurs courantes dans ce type de problème de concaténation de chaînes.
De la question initiale, comme l'a expliqué correctement @djechlin, nous voyons qu'il est nécessaire d'imprimer une nouvelle ligne après chaque ligne de votre tableau. Nous avons donc besoin de cette déclaration:
System.out.println();
Cependant, l’impression immédiatement après la première instruction d’impression donne des résultats erronés. Ce qui donne?
1
2
...
n
C'est un problème de portée. Notez qu'il existe deux boucles pour une raison: une boucle gère les lignes, tandis que l'autre gère les colonnes. Votre boucle interne, la boucle "j", parcourt chaque élément du tableau "j" pour un "i" donné. Par conséquent, à la fin de la boucle j, vous devriez avoir une seule ligne. Vous pouvez penser que chaque itération de cette boucle "j" constitue la construction des "colonnes" de votre table. Comme la boucle interne construit nos colonnes, nous ne voulons pas imprimer notre ligne là-bas - cela créerait une nouvelle ligne pour chaque élément!
Une fois que vous avez quitté la boucle j, vous devez terminer cette ligne avant de passer à la prochaine itération "i". C'est le bon endroit pour gérer une nouvelle ligne, car il s'agit de la "portée" des lignes de votre table, au lieu de ses colonnes.
for(i=0;i<7;i++){
for(j=0;j<5;j++) {
System.out.print(twoDm[i][j]+" ");
}
System.out.println();
}
Et vous pouvez voir que cette nouvelle ligne sera vérifiée, même si vous modifiez les dimensions de votre tableau en modifiant les valeurs finales de vos boucles "i" et "j".
Plus plus efficace et plus facile pour imprimer le tableau 2D de manière formatée:
Essaye ça:
public static void print(int[][] puzzle) {
for (int[] row : puzzle) {
for (int elem : row) {
System.out.printf("%4d", elem);
}
System.out.println();
}
System.out.println();
}
Exemple de sortie:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Une partie de @djechlin answer, vous devriez changer les lignes et les colonnes. Puisque vous êtes pris comme 7 rangées et 5 colonnes, mais en réalité vous voulez 7 colonnes et 5 rangées.
Faire de cette façon: -
int twoDm[][]= new int[5][7];
for(i=0;i<5;i++){
for(j=0;j<7;j++) {
System.out.print(twoDm[i][j]+" ");
}
System.out.println("");
}
Juste pour les enregistrements, Java 8 constitue une meilleure alternative.
int[][] table = new int[][]{{2,4,5},{6,34,7},{23,57,2}};
System.out.println(Stream.of(table)
.map(rowParts -> Stream.of(rowParts
.map(element -> ((Integer)element).toString())
.collect(Collectors.joining("\t")))
.collect(Collectors.joining("\n")));
Iliya,
Désolé.
votre code est un travail. mais sa eu un problème avec la rangée et les colonnes de tableau
ici je corrige votre code ce travail correctement, vous pouvez essayer ceci ..
public static void printMatrix(int size, int row, int[][] matrix) {
for (int i = 0; i < 7 * matrix[row].length; i++) {
System.out.print("-");
}
System.out.println("-");
for (int i = 1; i <= matrix[row].length; i++) {
System.out.printf("| %4d ", matrix[row][i - 1]);
}
System.out.println("|");
if (row == size - 1) {
// when we reach the last row,
// print bottom line "---------"
for (int i = 0; i < 7 * matrix[row].length; i++) {
System.out.print("-");
}
System.out.println("-");
}
}
public static void length(int[][] matrix) {
int rowsLength = matrix.length;
for (int k = 0; k < rowsLength; k++) {
printMatrix(rowsLength, k, matrix);
}
}
public static void main(String[] args) {
int[][] matrix = { { 1, 2, 5 }, { 3, 4, 6 }, { 7, 8, 9 }
};
length(matrix);
}
et dehors mis ressemblent
----------------------
| 1 | 2 | 5 |
----------------------
| 3 | 4 | 6 |
----------------------
| 7 | 8 | 9 |
----------------------