Альтернативный способ печати элементов строки многомерного массива

#java #arrays #multidimensional-array

#java #массивы #многомерный массив

Вопрос:

Существует ли альтернативный способ печати элементов строк многомерного массива в Java? У меня возникли проблемы с тем, как печатать строки элементов многомерного массива, поскольку требования совершенно разные.

Например, вместо:

 1 2
3 4
5 6
  

Результат будет:

 Contents of row 1 : 1 2
Contents of row 2 : 3 4
Contents of row 3 : 5 6  
  

Вот мой код, который я пытался выполнить

 "Contents of row "  (i 1)  " : "  arr[i][j] "
  

но это не совсем соответствует тому, к чему я стремился. Вывод становится:

 Contents of row 1 : 1  Contents of row 1 : 2
Contents of row 2 : 3  Contents of row 2 : 4
  
 import java.util.Scanner;

public class TestH13 {
    public static void main(String args[]) {
        // initialize here.
        int row, col, i, j;
        int[][] arr = new int[100][100];
        Scanner input = new Scanner(System.in);

        // enter row and column for array.
        System.out.print("How many rows: ");
        row = input.nextInt();
        System.out.print("How many columns: ");
        col = input.nextInt();

        // enter array elements.
        for (i = 0; i < row; i  ) {
            for (j = 0; j < col; j  ) {
                System.out.print("Enter element a["   i   "]["   j   "] : ");
                arr[i][j] = input.nextInt();
            }
        }

        // print the array elements
        System.out.println("Elements in the array");
        for (i = 0; i < row; i  ) {
            for (j = 0; j < col; j  ) {
                System.out.print(
                        "Contents of row "   (i   1)   " : "   arr[i][j]   "  ");
            }
            System.out.println();
        }
    }
}
  

Ответ №1:

Просто переместите "Contents of row: n" часть из внутреннего цикла:

 for (i = 0; i < row; i  ) {
    System.out.print("Contents of row "   (i   1)   " :");
    for (j = 0; j < col; j  ) {
        System.out.print(" "   arr[i][j]);
    }
    System.out.println();
}
  

Ответ №2:

во-первых, я изменил местоположение инициализации 2d-массива после получения количества строк и столбцов, во-вторых, я разделил ваш раздел печати на 2 части, одну при вводе строки и вторую в каждом столбце:

 int row, col, i, j;
Scanner input = new Scanner(System.in);

// enter row and column for array.
System.out.print("How many rows: ");
row = input.nextInt();
System.out.print("How many columns: ");
col = input.nextInt();

int[][] arr = new int[row][col];

// enter array elements.
for (i = 0; i < row; i  ) {
    for (j = 0; j < col; j  ) {
        System.out.print("Enter element a["   i   "]["   j   "] : ");
        arr[i][j] = input.nextInt();
    }
}

// print the array elements
System.out.println("Elements in the array");
for (i = 0; i < row; i  ) {
    System.out.print("Contents of row "   (i   1)   " : ");
    for (j = 0; j < col; j  ) {
        System.out.print(arr[i][j]   "  ");
    }
    System.out.println();
}
  

Ответ №3:

Вы можете обрабатывать строки следующим образом:

 int[][] arr = {
        {1, 2},
        {3, 4},
        {5, 6}};

IntStream
        // iterate over indices of the rows
        .range(0, arr.length)
        // for each row
        .mapToObj(i -> Arrays
                // iterate over elements of the row
                .stream(arr[i])
                // string representation of the element
                .mapToObj(String::valueOf)
                // join contents of the row into one
                // line with a space " " delimiter
                // and a certain prefix and suffix
                .collect(Collectors.joining(
                        " ", // delimiter
                        "Contents of row "   (i   1)   " : ", // prefix
                        "" // suffix
                )))
        // output line by line
        .forEach(System.out::println);
  
 Contents of row 1 : 1 2
Contents of row 2 : 3 4
Contents of row 3 : 5 6