Массивы в Java: создание, использование и примеры. Практические Задания
Ниже — восемь практических задач на массивы в Java: от создания и инициализации одномерных и двумерных массивов до поиска максимума и минимума и «гирлянды» на System.arraycopy(). Перед выполнением рекомендуем изучить уроки раздела «Массивы». К каждой задаче есть решение на Patreon, а к первым четырём — ещё и видеоразбор.
Одномерный массив типа String
- Создать массив типа
Stringс размером 7. - Записать в него значения дней недели.
- Вывести на консоль значение последнего элемента.
Подсказка
Индексация массива начинается с нуля, поэтому в массиве из 7 элементов последний имеет индекс 6. Чтобы не зашивать число в код, обращайтесь к последнему элементу через days[days.length - 1] — такой код не сломается при изменении размера массива.
Смотрите разбор задачи в видео.
Одномерный массив типа double
- Создать массив типа
doubleс размером 4. - Записать в него любые значения с помощью блока инициализации.
- Вывести на консоль значение первого элемента.
Смотрите разбор задачи в видео.
Двумерный массив типа String
- Создать массив типа
Stringразмером 3×6. - Записать в него значения:
a1 a2 a3 a4 a5 a6 b1 b2 b3 b4 b5 b6 c1 c2 c3 c4 c5 c6 - Распечатать массив.
Обратите внимание
Распечатать двумерный массив можно двумя вложенными циклами, а можно одной строкой: System.out.println(Arrays.deepToString(array)). Метод Arrays.deepToString() обходит вложенные массивы рекурсивно — обычный Arrays.toString() для двумерного массива выведет лишь ссылки на строки.
Смотрите разбор задачи в видео.
Двумерный массив типа char
- Создать двумерный массив типа
charразмером 4×2. - Записать в него значения с помощью блока инициализации.
- Распечатать значения массива.
Смотрите разбор задачи в видео.
Максимум и минимум в каждой строке массива
- Создать двумерный массив 5×8 типа
intи заполнить его с помощью блока инициализации. - Найти максимальное и минимальное значение в каждой «строке» и записать эти значения в двумерный массив 5×2.
- Распечатать массив, содержащий максимальные и минимальные значения.
На чём чаще всего ошибаются
Не инициализируйте max и min нулём: если все числа в строке отрицательные, максимум «застрянет» на нуле, которого в массиве нет. Берите за стартовое значение первый элемент строки — array[i][0] — и сравнивайте с остальными.
Гирлянда с помощью массива
Реализовать задачу с гирляндой (Операторы языка Java. Задание 3), используя массивы: состояние каждой лампочки храните в элементе массива boolean[] или int[]. Для реализации режима бегущего огня используйте метод System.arraycopy().
Проверьте свой код
При написании программ обращайте внимание на рекомендации по оформлению кода.
Поиск элемента через Arrays.binarySearch()
- Создать отсортированный массив типа
intразмером 10, например:{2, 5, 8, 12, 16, 23, 38, 45, 56, 72}. - С помощью метода
Arrays.binarySearch()найти индекс элемента со значением 45. - Вывести найденный индекс на консоль. Затем выполнить поиск значения, которого нет в массиве (например, 100), вывести результат и в комментарии к коду объяснить, что означает отрицательное число, которое возвращает метод в этом случае.
Обратите внимание
Arrays.binarySearch() работает только на отсортированном массиве — на неотсортированном результат непредсказуем. Если элемент не найден, метод возвращает отрицательное число -(точка_вставки) - 1, а не -1: по нему можно узнать, куда элемент нужно было бы вставить, чтобы массив остался отсортированным.
Копирование части массива через System.arraycopy()
- Создать массив типа
intразмером 10 и заполнить его значениями от 1 до 10. - С помощью метода
System.arraycopy()скопировать элементы с 3-го по 7-й (индексы 2–6) в новый массив размером 5. - Распечатать на консоль исходный и новый массив, используя метод
Arrays.toString().
Часто задаваемые вопросы
Как объявить и инициализировать массив в Java?
Два основных способа: через new с указанием размера — String[] days = new String[7]; (элементы заполняются значениями по умолчанию), либо блоком инициализации со значениями сразу — double[] d = {1.5, 2.7, 3.1, 4.2};. Для двумерного массива блок вкладывается: char[][] m = {{'a', 'b'}, {'c', 'd'}};.
Как вывести массив на консоль в Java?
Прямой вызов System.out.println(array) напечатает не содержимое, а строку вида [Ljava.lang.String;@1b6d3586 — тип и хеш. Используйте цикл for/for-each либо готовые методы: Arrays.toString(array) для одномерного массива и Arrays.deepToString(array) для двумерного.
Как найти максимальный и минимальный элемент массива?
Заведите переменные max и min, инициализируйте их первым элементом массива и в цикле сравнивайте с каждым следующим: if (a[i] > max) max = a[i];. Начиная с Java 8 то же можно сделать через Stream API: Arrays.stream(a).max().getAsInt().
Что делает System.arraycopy() и чем он лучше цикла?
Метод копирует length элементов из массива src, начиная с позиции srcPos, в массив dest, начиная с позиции destPos. Это нативный метод JVM — на больших массивах он заметно быстрее поэлементного цикла; именно на нём построен и Arrays.copyOf(). Для сдвига элементов (бегущий огонь) источник и приёмник могут быть одним и тем же массивом.
Что такое двумерный массив в Java на самом деле?
В Java нет «матриц» как отдельного типа: двумерный массив — это массив, элементы которого сами являются массивами. Поэтому array.length возвращает число строк, array[0].length — длину первой строки, а строки могут иметь разную длину (ступенчатый, jagged-массив).
Комментарии