Java двумерный массив диагональ

Проверка диагонали массива

Всем привет. Я только начал учить джаву и хочу разобраться что к чему.. Подскажите, пожалуйста, как написать программу, которая проверит диагональ массива (все значения, которые лежат за пределами
главной диагонали равны нулю).
Если тут есть кто хорошо в этом понимаете, помогите, пожалуйста написать
Спасибо!!)))

int [ ] [ ] tab = { {1 ,0 ,0}, {0 ,1 ,0}, {0 ,0 ,1} };

Минимальный элемент главной диагонали массива, максимальный элемент побочной диагонали массива
Определить: а) минимальный элемент главной диагонали массива; б) максимальный элемент побочной.

Создать массив В из элементов главной диагонали массива А и массив С из дополнительной диагонали массива А
Дан массив А размером n*m. Сформировать массив В из элементов главной диагонали и массив С из.

Обменять элементы массива на главной диагонали с элементами на побочной диагонали
Всем привет. Дан двумерный массив размерностью 5х5, заполненный случайными числами из диапазона.

Посчитать сумму элементов каждой диагонали двумерного массива, параллельной побочной диагонали
Здравствуйте уважаемые пользователи форума. Помогите пожалуйста с решением задачи по C#: "Дана.

Лучший ответ

Сообщение было отмечено new123 как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import java.util.Arrays; public class Main { public static void main(String[] args) { int[][] arr = new int[5][5]; for (int i = 0; i  arr.length; i++) { for (int j = 0; j  arr.length; j++) { if (i == j) arr[i][j] = 1; else arr[i][j] = 0; } } for (int i = 0; i  arr.length; i++) { System.out.println(Arrays.toString(arr[i])); } } }

Лучший ответ

Сообщение было отмечено new123 как решение

Решение

Надеюсь я правильно понял, что вам нужно определить, является ли матрица единичной. Поэтому придумал вот такое:

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
public class MainClass { public static void main(String[] args) { int[][] mas = { {1, 0, 0}, {0, 1, 0}, {0, 0, 1}, }; int diagCounter = 0;//счетчик единиц на главной диагонали int otherCounter = 0;//счетчик нулей в остальных ячейках матрицы for(int i = 0; i  mas.length; i++) for(int j = 0; j  mas.length; j++) { /*если мы находимся на ячейке главной диагонали (номер строки равен номеру столбца), то сравниваем, равно ли значение ячейки единице, и если да, то увеличиваем счетчик единиц*/ if(j == i && mas[i][j] == 1) diagCounter++;//увеличиваем счетчик единиц на гл. диагонали /*если мы находимся на остальной части матрицы (номер строки не равен номеру столбца), то сравниваем, равно ли значение ячейки нулю, и если да, то увеличиваем счетчик нулей*/ if(j != i && mas[i][j] == 0) otherCounter++;//увеличиваем счетчик нулей на остальной части матрицы } /*если число итоговое единиц на главной диагонали равно длине массива (использовать mas.length можно только для квадратного массива), а также число нулей равно: длина_массива * длина_массива-1, то. нутыпонелтипода. */ if(diagCounter == mas.length && otherCounter == (mas.length * (mas.length-1))) System.out.println("Главная диагональ содержит единицы, а остальная матрица нули."); else System.out.println(""); } }

Добавлено через 7 минут
ЗЫ: по формуле mas.length * (mas.length-1) рассчитываю необходимое кол-во нулей на остальной части матрицы.
Для матрицы 3×3 нулей будет 6, для 4×4 будет 12, для 5×5 будет 20.

Источник

Цикл по диагонали через двумерный массив Java

В этом руководстве мы увидим, как перебирать двумерный массив по диагонали. Предлагаемое нами решение можно использовать для квадратного двумерного массива любого размера.

2. Двумерный массив

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

Далее нам нужно понять, сколько диагональных линий у нас в массиве, как показано на диаграмме. Мы делаем это, сначала получая длину одного измерения массива, а затем используя это, чтобы получить количество диагональных линий ( diagonalLines ) .

Затем мы используем количество диагональных линий, чтобы получить среднюю точку, которая поможет в поиске индексов строк и столбцов.

В этом примере средняя точка равна трем:

int length = twoDArray.length int diagonalLines = (length + length) - 1 int midPoint = (diagonalLines / 2) + 1

3. Получение индексов строк и столбцов

Чтобы перебрать весь массив, мы начинаем цикл с 1 до тех пор, пока переменная цикла не станет меньше или равна переменной diagonalLines .

Давайте также представим идею количества элементов в диагональной линии, назвав ее itemsInDiagonal . Например, в строке 3 на диаграмме выше есть 3 элемента (g, e, c), а в строке 4 — 2 (h, f). Эта переменная увеличивается на 1 в цикле, когда переменная цикла i меньше или равна midPoint . В противном случае он уменьшается на 1.

После увеличения или уменьшения itemsInDiagonal мы получаем новый цикл с переменной цикла j . Переменная j увеличивается от 0 до значения меньше itemsInDiagonal.

Затем мы используем переменные цикла i и j, чтобы получить индексы строки и столбца. Логика этого вычисления зависит от того, больше ли переменная цикла i, чем midPoint или нет. Когда i больше midPoint , мы также используем переменную длины для определения индексов строки и столбца:

int rowIndex; int columnIndex; if (i > else < itemsInDiagonal--; for (int j = 0; j < itemsInDiagonal; j++) < rowIndex = (length - 1) - j; columnIndex = (i - length) + j; items.append(twoDArray[rowIndex][columnIndex]); >>

4. Вывод

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

Как всегда, полный исходный код примера доступен на GitHub.

Популярные посты

Источник

JAVA Запись диагонали двумерного массива в одномерный массив

Хотите записать диагональ двумерного массива (n*n Matrix) в одномерный массив.

 public int[] getDiagonalFromArray(int[][] two_d_array) < int[] diagonal_array = new int[two_d_array[0].length]; int k=0; for (int i = 0; i < two_d_array[0].length; i++) < for (int j = 0; j < two_d_array[1].length; j++) < for (int l = 0; l < two_d_array[0].length; l++) < diagonal_array[k]=two_d_array[i][j];>//HERE SHOULD BE THE ERROR. HOW DO I CYCLE THROUGH THE 1dim "diagonal_array"? > > return diagonal_array; > 

Этот метод предоставляет неправильные значения.

Этот мой метод работает, но просто печатает диагональ, а не помещает ее в массив 1dim.

 public void getDiagonal(int[][] two_d_array) < //int[] diagonal_array = new int[two_d_array[0].length]; for (int i = 0; i < two_d_array[0].length; i++) < for (int j = 0; j < two_d_array[1].length; j++) < if (i==j) System.out.print(two_d_array[i][j]+" "); >> > 

Где логическая разница? Я попробовал условие if для первого метода, но оно вызывает исключение «outofbound».

3 ответа

Зачем вам нужно более одной петли?

Кажется, мне этого достаточно.

Здесь я рассматриваю главные диагональные элементы как множество элементов , где n & m количество строк и количество столбцов (на строку?) соответственно.

Таким образом, количество диагональных элементов никогда не бывает больше min(numOfRows, numOfColumns) ,

И так, вы всегда можете попробовать:

public int[] getDiagonalFromArray(int[][] 2DArray) < int[] diagonalArray = new int[Math.min(2DArray.length, 2DArray[0].length]); int k=0; for (int i = 0; i < 2DArray.length && k < diagonalArray.l length; ++i) < for (int j = 0; j < 2DArray[i].length && k < diagonalArray.l length; ++j) < if (i == j) < diagonalArray[k++]=2DArray[i][j]; >> > return diagonalArray; > 

Бросил в некоторые проверки границ для хорошей меры.

Ваша матрица ввода должна быть как минимум прямоугольной (квадрат имеет смысл), иначе код будет работать ненадежно.

Это то же самое, что и ответ @ Andreas, но я жертвую производительностью и краткостью здесь для понимания.

Источник

Зацикливание По диагонали Через 2d массив Java

Узнайте, как выполнить цикл по диагонали в 2d-массиве в Java.

1. Обзор

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

2. Двумерный Массив

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

Далее нам нужно понять, сколько диагональных линий у нас в массиве, как показано на диаграмме. Мы делаем это, сначала получая длину одного измерения массива, а затем используя ее, чтобы получить количество диагональных линий ( Диагональные линии ) .

Затем мы используем количество диагональных линий, чтобы получить среднюю точку, которая поможет в поиске индексов строк и столбцов.

В этом примере средняя точка равна трем:

int length = twoDArray.length int diagonalLines = (length + length) - 1 int midPoint = (diagonalLines / 2) + 1

3. Получение индексов строк и столбцов

Чтобы выполнить цикл по всему массиву, мы начинаем цикл с 1 до тех пор, пока переменная цикла не станет меньше или равна переменной диагональные линии .

Давайте также представим идею количества элементов в диагональной линии, назвав ее элементы в диагонали . Например, строка 3 на приведенной выше диаграмме содержит 3 элемента (g, e, c), а строка 4-2 (h, f). Эта переменная увеличивается на 1 в цикле, когда переменная цикла i меньше или равна средней точке . В противном случае он уменьшается на 1.

После увеличения или уменьшения элементов По диагонали у нас появляется новый цикл с переменной цикла j . Переменная j увеличивается от 0 до тех пор, пока она не станет меньше itemsInDiagonal.

Затем мы используем переменные цикла i и j для получения индексов строк и столбцов. Логика этого вычисления зависит от того, является ли переменная цикла i больше средней точки |/или нет. Когда i больше средней точки , мы также используем переменную length для определения индексов строк и столбцов:

int rowIndex; int columnIndex; if (i > else < itemsInDiagonal--; for (int j = 0; j < itemsInDiagonal; j++) < rowIndex = (length - 1) - j; columnIndex = (i - length) + j; items.append(twoDArray[rowIndex][columnIndex]); >>

4. Заключение

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

Как всегда, полный исходный код примера доступен на GitHub .

Источник

Читайте также:  Parse any date format java
Оцените статью