it-swarm.com.ru

Java - лучший способ распечатать 2D массив?

Мне было интересно, как лучше всего распечатать 2D-массив. Это некоторый код, который у меня есть, и мне просто интересно, является ли это хорошей практикой или нет. Также исправьте меня в любых других ошибках, которые я сделал в этом коде, если вы найдете. Спасибо!

int rows = 5;
int columns = 3;

int[][] array = new int[rows][columns];

for(int i = 0; i<rows; i++)
    for(int j = 0; j<columns; j++)
        array[i][j] = 0;

for(int i = 0; i<rows; i++)
{
    for(int j = 0; j<columns; j++)
    {
        System.out.print(array[i][j]);
    }
    System.out.println();
}
42
Chip Goon Lewin

Вы можете напечатать простым способом.

Используйте ниже, чтобы распечатать 2D массив

int[][] array = new int[rows][columns];
System.out.println(Arrays.deepToString(array));

Используйте ниже, чтобы распечатать 1D массив

int[] array = new int[size];
System.out.println(Arrays.toString(array));
109
Prabhakaran

Я бы предпочел, как правило, foreach, когда мне не нужно делать арифметические операции с их индексами.

for (int[] x : array)
{
   for (int y : x)
   {
        System.out.print(y + " ");
   }
   System.out.println();
}
15
snr

Простой и понятный способ печати 2D-массива. 

System.out.println(Arrays.deepToString(array).replace("], ", "]\n").replace("[[", "[").replace("]]", "]"));
12
matthewpliddy

Там нет ничего плохого в том, что у вас есть. Любой, кто читает ваш код, должен легко усваивать циклы с двойным вложением. 

Тем не менее, следующая формулировка является более плотной и более идиоматической Java. Я бы посоветовал покопаться в некоторых статических служебных классах, таких как Arrays и Collections раньше, чем позже. Тонны шаблонной плиты могут быть сбриты их эффективным использованием.

for (int[] row : array)
{
    Arrays.fill(row, 0);
    System.out.println(Arrays.toString(row));
}
7
ashika

Это лучшее, что я думаю: 

   for (int[] row : matrix){
    System.out.println(Arrays.toString(row));
   }
3
Plcode
|1 2 3|
|4 5 6| 

Используйте код ниже, чтобы напечатать значения.

System.out.println(Arrays.deepToString());

Вывод будет выглядеть так (вся матрица в одной строке):

[[1,2,3],[4,5,6]]
1
Baseem

@ Ответ Ашики работает фантастически, если вы хотите, чтобы (0,0) отображалось в верхнем левом углу, в соответствии с обычной конвенцией CS. Однако, если вы предпочитаете использовать обычное математическое соглашение и поставить (0,0) в нижнем левом углу, вы можете использовать это:

LinkedList<String> printList = new LinkedList<String>();
for (char[] row: array) {
    printList.addFirst(Arrays.toString(row));;
}
while (!printList.isEmpty())
    System.out.println(printList.removeFirst());

Это использовало LIFO (последний пришел первым вышел), чтобы изменить порядок во время печати.

1
Max von Hippel

Двухлинейный с новой линией:

for(int[] x: matrix)
            System.out.println(Arrays.toString(x));

Один лайнер без новой линии:

System.out.println(Arrays.deepToString(matrix));
1
suvojit_007

From Oricle Offical Java 8 Doc :

public static String deepToString(Object[] a)

Возвращает строковое представление "глубокого содержимого" указанный массив. Если массив содержит другие массивы в качестве элементов, строковое представление содержит их содержимое и так далее. Этот метод Предназначен для преобразования многомерных массивов в строки.

0
ZhaoGang

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

for (char[] temp : box) {
    System.err.println(Arrays.toString(temp).replaceAll(",", " ").replaceAll("\\[|\\]", ""));
}
0
RAN_0915