it-swarm.com.ru

Как напечатать таблицу двумерного массива как

У меня проблема с двумерным массивом. У меня есть такой дисплей:

1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 . . . etc

То, что в основном я хочу, - это отобразить его так:

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

Вот мой код: 

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

Результат

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  

Конечно, вы можете поменять местами 7 и 5, как указано в других ответах, чтобы получить 7 в строке.

10
Andrew Thompson

Вам нужно напечатать новую строку после каждой строки ... System.out.print("\n"), или использовать println и т.д. В таком случае вы просто ничего не печатаете - System.out.print(""), замените print на println или "" на "\n".

13
djechlin

Если вы не возражаете против запятых и скобок, вы можете просто использовать:

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

Вы можете написать метод для печати 2d-массива следующим образом:

//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

В дополнение к коду, я опубликую решение с немного большей проработкой, поскольку первоначальная ошибка и последующие, которые были продемонстрированы в комментариях, являются распространенными ошибками в такой проблеме конкатенации строк.

Исходя из первоначального вопроса, который был адекватно объяснен @djechlin, мы видим, что есть необходимость печатать новую строку после того, как каждая строка вашей таблицы будет заполнена. Итак, нам нужно это утверждение:

System.out.println();

Однако печать этого сразу после первого оператора печати дает ошибочные результаты. Что дает?

1 
2 
...
n 

Это проблема объема. Обратите внимание, что по причине есть два цикла - один обрабатывает строки, а другой - столбцы. Ваш внутренний цикл, цикл «j», проходит через каждый элемент массива «j» для данного «i». Поэтому в конце цикла j у вас должна быть одна строка. Вы можете думать о каждой итерации этого цикла «j» как о построении «столбцов» вашей таблицы. Поскольку внутренний цикл строит наши столбцы, мы не хотим печатать там нашу строку - это создаст новую строку для каждого элемента!

Как только вы выйдете из цикла j, вам нужно завершить эту строку, прежде чем переходить к следующей итерации «i». Это правильное место для обработки новой строки, потому что это «область» строк вашей таблицы, а не столбцов таблицы.

for(i=0;i<7;i++){
    for(j=0;j<5;j++) {
        System.out.print(twoDm[i][j]+" ");  
    }
    System.out.println();
}

И вы можете видеть, что эта новая строка останется верной, даже если вы измените размеры таблицы, изменив конечные значения ваших циклов «i» и «j».

3
Anthony Neace

Более эффективный и простой способ распечатать 2D-массив в форматированном виде:

Попробуй это:

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

Пример вывода:

   0   1   2   3
   4   5   6   7
   8   9  10  11
  12  13  14  15
3
Hassnain Jamil

Часть из @djechlin answer, вы должны изменить строки и столбцы. Так как вы взяты за 7 строк и 5 столбцов, но на самом деле вы хотите 7 столбцов и 5 строк. 

Сделайте так:

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

Просто для записей, Java 8 предоставляет лучшую альтернативу.

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, 

Простите за это.

твой код это работа. но у него были некоторые проблемы с массивом строк и столбцов

здесь я исправляю ваш код этой работы правильно, вы можете попробовать это ..

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

}

и положил выглядеть

----------------------
|    1 |    2 |    5 |
----------------------
|    3 |    4 |    6 |
----------------------
|    7 |    8 |    9 |
----------------------
0
Kum4r4n

Вы можете создать метод, который печатает матрицу в виде таблицы:

Примечание. Это не очень хорошо работает с матрицами с числами из многих цифр и неквадратные матрицы.

    public static void printMatrix(int size,int row,int[][] matrix){

            for(int i = 0;i <  7 * size ;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 * size ;i++){ 
                          System.out.print("-");
                     }
                          System.out.println("-");

                  }
   }

  public static void main(String[] args){

     int[][] matrix = {

              {1,2,3,4},
              {5,6,7,8},
              {9,10,11,12},
              {13,14,15,16}


      };

       // print the elements of each row:

     int rowsLength = matrix.length;

          for(int k = 0; k < rowsLength; k++){

              printMatrix(rowsLength,k,matrix);
          }


  }

Результат : 

---------------------
|  1 |  2 |  3 |  4 |
---------------------
|  5 |  6 |  7 |  8 |
---------------------
|  9 | 10 | 11 | 12 |
---------------------
| 13 | 14 | 15 | 16 |
---------------------

Я создал этот метод, практикуя циклы и массивы, я бы предпочел использовать:

System.out.println(Arrays.deepToString(matrix).replace("], ", "]\n")));

0
Iliya