Перейти к основному содержимому

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

· 3 мин. чтения

1. Обзор

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

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

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

./dc4bc3f897f2464a12f071cd8c686772.png

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

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

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

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

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

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

for (int i = 1; i <= diagonalLines; i++) {
// some operations
}

Давайте также представим идею количества элементов в диагональной линии, назвав ее 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 <= midPoint) {
itemsInDiagonal++;
for (int j = 0; j < itemsInDiagonal; j++) {
rowIndex = (i - j) - 1;
columnIndex = j;
items.append(twoDArray[rowIndex][columnIndex]);
}
} else {
itemsInDiagonal--;
for (int j = 0; j < itemsInDiagonal; j++) {
rowIndex = (length - 1) - j;
columnIndex = (i - length) + j;
items.append(twoDArray[rowIndex][columnIndex]);
}
}

4. Вывод

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

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