web-dev-qa-db-fra.com

Comment imprimer un tableau à deux dimensions comme un tableau

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("");}
        }
14
kix
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);
        }
    }
}

Sortie

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.

10
Andrew Thompson

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".

13
djechlin

Si cela ne vous dérange pas des virgules et des crochets, vous pouvez simplement utiliser:

System.out.println(Arrays.deepToString(twoDm).replace("], ", "]\n")));
12
Marco Lackovic

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();
    }
}
11
Thorn

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".

3
Anthony Neace

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
3
Hassnain Jamil

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("");
}
3
Siva Charan

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")));
2
Alok Shukla

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 |
----------------------
0
Kum4r4n