Распространённые паттерны 2D-массивов
Часть раздела Логика и управление потоком путешествия по Java на Coddy — урок 8 из 59.
Определённые шаблоны часто встречаются при работе с двумерными массивами. Распознавание этих шаблонов поможет вам решать задачи более эффективно. Вот несколько распространённых шаблонов:
Диагональный обход
Доступ к элементам, где индекс строки равен индексу столбца (matrix[i][i]), дает главную диагональ. Для антидиагонали сумма индексов строки и столбца равна размеру массива минус 1 (matrix[i][size - 1 - i]).
Например:
1 2 3
4 5 6
7 8 9Проход по главной диагонали (matrix[i][i]): 1, 5, 9
Проход по побочной диагонали (matrix[i][size - 1 - i]): 3, 5, 7
Обход границы
Чтобы обойти граничные элементы, вы держите один индекс постоянным (0 или size - 1), перебирая другой.
Чтобы получить доступ к верхней границе, вы перебираете столбцы с индексом строки, зафиксированным на 0.
Например:
1 2 3 4
5 6 7 8
9 10 11 12граничные элементы: 1, 2, 3, 4, 8, 12, 11, 10, 9, 5 (все кроме 6 и 7)
Задание
ЛегкоСоздайте метод с именем printPatterns, который принимает квадратный двумерный массив целых чисел (matrix) в качестве входных данных и выводит следующие шаблоны:
- Главная диагональ: Вывести все элементы, где индекс строки равен индексу столбца.
- Противодиагональ: Вывести все элементы, где сумма индексов строки и столбца равна размеру матрицы минус 1.
- Границы: Вывести элементы верхней, нижней, левой и правой границ матрицы.
Вывод должен выглядеть следующим образом:
Main Diagonal: 1 6 11 16
Anti-Diagonal: 4 7 10 13
Top Border: 1 2 3 4
Bottom Border: 13 14 15 16
Left Border: 1 5 9 13
Right Border: 4 8 12 16Шпаргалка
Общие шаблоны обхода двумерного массива:
Диагональный обход
Главная диагональ: matrix[i][i] (индекс строки равен индексу столбца)
Побочная диагональ: matrix[i][size - 1 - i] (сумма индексов строки и столбца равна size - 1)
1 2 3
4 5 6
7 8 9Главная диагональ: 1, 5, 9
Побочная диагональ: 3, 5, 7
Обход границы
Оставляйте один индекс постоянным (0 или size - 1), перебирая другой:
- Верхняя граница: row = 0, перебирать столбцы
- Нижняя граница: row = size - 1, перебирать столбцы
- Левая граница: column = 0, перебирать строки
- Правая граница: column = size - 1, перебирать строки
Попробуйте сами
// Пишите свой код только внутри класса. Не пишите main() или любой код вне этого класса.
class PrintPatterns {
public static void printPatterns(int[][] matrix) {
// Напишите свой код здесь
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Многомерные массивы
Основы 2D-массивовДоступ к элементам 2D-массиваВложенные циклы с 2D-массивамиПовторение - 2D-массивыСложение и вычитание матрицРваные массивы3D-массивы и вышеРаспространённые паттерны 2D-массивовПовторение - всё о массивах2HashMap Часть 1
Что такое HashMap?Объявление HashMapДоступ к значениямПроверка существования ключаИзменение словарейИтоги - HashMap3HashMap. Часть 2
Методы HashMapИтерация с keySet()Итерация с entrySet()Вложенный HashMapПовторение - Управление складомПовторение - Операции HashMap6Продвинутое управление потоком
Операторы метокВыражение switchСопоставление шаблоновОхранные клаузыИтоги - управление потоком9Проект - Счетчик уникальных слов
Ввод и хранение текстаОбработка слов