Подтвердить что ты не робот

Как печатать двумерный массив, как таблица

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

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

Ответ 1

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 в строке.

Ответ 2

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

Ответ 3

Вы можете написать метод для печати массива 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();
    }
}

Ответ 4

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

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

Ответ 5

Часть из ответа @djechlin, вы должны изменить строки и столбцы. Поскольку вы взяты как 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("");
}

Ответ 6

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

Из первоначального вопроса, который был адекватно объяснен @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();
}

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

Ответ 7

Только для записей, 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")));

Ответ 8

Подробнее эффективный и простой способ напечатать 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

Ответ 9

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

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

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

Ответ 10

Это может быть поздно, но этот метод делает то, что вы просите совершенным образом, он даже демонстрирует элементы в стиле "table-like", что является блестящим для новичков, чтобы действительно понять, как выглядит многомерный массив.

public static void display(int x[][])   // So we allow the method to take as input Multidimensional arrays
    {
        //Here we use 2 loops, the first one is for the rows and the second one inside of the rows is for the columns
        for(int rreshti = 0; rreshti < x.length; rreshti++)     // Loop for the rows
        {
            for(int kolona = 0; kolona < x[rreshti].length;kolona++)        // Loop for the columns
            {
                System.out.print(x[rreshti][kolona] + "\t");            // the \t simply spaces out the elements for a clear view   
            }
            System.out.println();   // And this empty outputprint, simply makes sure each row (the groups we wrote in the beggining in seperate {}), is written in a new line, to make it much clear and give it a table-like look 
        }
    }

После завершения создания этого метода вы просто поместите это в свой основной метод:

display(*arrayName*); // So we call the method by its name, which can be anything, does not matter, and give that method an input (the Array name)

Примечание. Поскольку мы сделали этот метод так, чтобы он требовал многомерного массива в качестве ввода, он не будет работать для массивов с 1-мерным размером (что никак не имеет смысла)

Источник: введите ссылку здесь

PS. Возможно, это немного запутывает, так как я использовал свой язык для обозначения элементов/переменных, однако CBA переводит их, извините.

Ответ 11

public static void main(String[] args) {
    int[][] matrix = { 
                       { 1, 2, 5 }, 
                       { 3, 4, 6 },
                       { 7, 8, 9 } 
                     };

    System.out.println(" ** Matrix ** ");

    for (int rows = 0; rows < 3; rows++) {
        System.out.println("\n");
        for (int columns = 0; columns < matrix[rows].length; columns++) {
            System.out.print(matrix[rows][columns] + "\t");
        }
    }
}

Это работает, добавьте новую строку для цикла строки. Когда будет выполнена первая строка, код будет переходить в новую строку.

Ответ 12

For traversing through a 2D array, I think the following for loop can be used.

        for(int a[]: twoDm)
        {
            System.out.println(Arrays.toString(a));
        }
if you don't want the commas you can string replace
if you want this to be performant you should loop through a[] and then print it.

Ответ 13

ВСЕ ВАС ПОЖАЛУЙСТА, ПОТЕРЯТЬ НА ЭТО Я удивлен, что мне нужно немного IQ просто получить длину by arr [0]. длина и проблема решена

   for (int i = 0; i < test.length; i++) {
        for (int j = 0; j < test[0].length; j++) {

        System.out.print(test[i][j]);
    }
        System.out.println();
    }