Рубрики
Без рубрики

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

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

Автор оригинала: baeldung.

1. Обзор

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

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

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

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

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

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

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
}

Давайте также представим идею количества элементов в диагональной линии, назвав ее элементы в диагонали . Например, строка 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 <= 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 .