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 .