Как положить значения из двумерного массива в обычный?

Рейтинг: 0Ответов: 2Опубликовано: 05.02.2023

Мне нужно вывести в массив диагональ.

Например, есть двумерный массив:

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

Из него должен получиться одномерный массив [0,5,1].

Вот мой код:

public class MatrixDiagonal {
  public int[] getDiagonal(int[][] matrix) {
    for (int i = 0; i < matrix.length; i++) {
       for (int j = 0, x = matrix[i].length - 1; j<matrix[i].length; j++, x--) {
          if (i == j) {
          //??? 
          }
        }
    return;
    }
  }

Ответы

▲ 0Принят

Если я правильно понял ваш вопрос, то вам нужно вывести все числа с диагонали.

И у вас есть двумерный массив:

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

Как решить вашу проблему:

  1. Создайте переменную-счётчик (зачем она нужна, увидите дальше). Присвойте ей значение 0:
int counter = 0;
  1. Создайте новый одномерный массив, в который будут записываться уже готовые нужные значения. Длинна этого массива будет равна количеству массивов в двумерном массиве:
int [] newArray = new int [arr.length];
  1. Создайте цикл foreach, который будет проходиться по массивам, которые лежат внутри двумерного (двумерный массив - массив массивов). В цикле увеличивайте переменную counter на 1. В индекс под номером counter массива newArray кладите индекс под номером counter массива j.
for(int[] j : arr){
     newArray[counter] = j[counter];
     counter++;
}
  1. Можно вывести новый массив на экран, чтобы проверить, всё ли верно. Это можно сделать циклом, но так быстрее:
System.out.println(java.util.Arrays.toString(newArray));

Вывод:

[0, 5, 1]

P.S Я убедительно вас прошу не просто скопировать решение, а разобраться в нём. Я специально всё очень подробно расписал. Если мой ответ помог, то вы можете пометить его как решение =).

▲ 1

Задача имеет смысл для квадратного входного массива/матрицы, поэтому считаем, что это условие выполняется.

  1. Создаёте целочисленный массив для хранения элементов на диагонали, его размер такой же, как и количество строк во входной матрице.
  2. В простом цикле заполняется массив-результат, для элементов на главной диагонали индекс строки равен индексу столбца.
  3. Возвращается массив-результат.

Реализация с использованием цикла не приводится в педагогических целях.

С использованием Stream API реализация упрощается до следующей:

public static int[] getDiagonal(int[][] arr) {
    return IntStream.range(0, arr.length) // индексы строк/колонок на главной д.
            .map(i -> arr[i][i])
            .toArray();
}