Как положить значения из двумерного массива в обычный?
Мне нужно вывести в массив диагональ.
Например, есть двумерный массив:
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;
}
}
Ответы (2 шт):
Задача имеет смысл для квадратного входного массива/матрицы, поэтому считаем, что это условие выполняется.
- Создаёте целочисленный массив для хранения элементов на диагонали, его размер такой же, как и количество строк во входной матрице.
- В простом цикле заполняется массив-результат, для элементов на главной диагонали индекс строки равен индексу столбца.
- Возвращается массив-результат.
Реализация с использованием цикла не приводится в педагогических целях.
С использованием Stream API реализация упрощается до следующей:
public static int[] getDiagonal(int[][] arr) {
return IntStream.range(0, arr.length) // индексы строк/колонок на главной д.
.map(i -> arr[i][i])
.toArray();
}
Если я правильно понял ваш вопрос, то вам нужно вывести все числа с диагонали.
И у вас есть двумерный массив:
int [][] arr = new int [][]{
{0, 1, 2},
{4, 5, 6},
{1, 1, 1}
};
Как решить вашу проблему:
- Создайте переменную-счётчик (зачем она нужна, увидите дальше). Присвойте ей значение 0:
int counter = 0;
- Создайте новый одномерный массив, в который будут записываться уже готовые нужные значения. Длинна этого массива будет равна количеству массивов в двумерном массиве:
int [] newArray = new int [arr.length];
- Создайте цикл
foreach, который будет проходиться по массивам, которые лежат внутри двумерного (двумерный массив - массив массивов). В цикле увеличивайте переменнуюcounterна1. В индекс под номеромcounterмассиваnewArrayкладите индекс под номеромcounterмассиваj.
for(int[] j : arr){
newArray[counter] = j[counter];
counter++;
}
- Можно вывести новый массив на экран, чтобы проверить, всё ли верно. Это можно сделать циклом, но так быстрее:
System.out.println(java.util.Arrays.toString(newArray));
Вывод:
[0, 5, 1]
P.S Я убедительно вас прошу не просто скопировать решение, а разобраться в нём. Я специально всё очень подробно расписал. Если мой ответ помог, то вы можете пометить его как решение =).