Найти в Дзене
Изучаем Java

Java08: массивы

Массив - это хранилище однотипных объектов. Состоит из отдельных ячеек, к каждой из которых можно обратиться по номеру. Обладает фиксированной длиной (количеством ячеек). Давайте напишем небольшую программу-опросник. Зададим набор вопросов и соберем ответы. Вопросы и ответы будем хранить в массивах. Что здесь происходит: questions.length - размер массива с вопросами.
new String[10] - создать массив (выделить память под массив) из 10 элементов.
new String[questions.length] - создать массив такой же длины, как и массив questions System.out.println() - печатает пустую строку scanner.nextLine() - считать строку, которую введет пользователь String quest = questions[i] - берем значение из i-ой ячейки и записываем в переменную quest
System.out.println(quest) - выводим вопрос
String answer = scanner.nextLine() - считываем ввод пользователя
answers[i] = answer - записываем ответ в i-тую ячейку массива ответов "%s : %s \n" - шаблон для 2-х строковых значений
%s - строковое значение
\n - сп
Оглавление

Массив - это хранилище однотипных объектов. Состоит из отдельных ячеек, к каждой из которых можно обратиться по номеру. Обладает фиксированной длиной (количеством ячеек).

Давайте напишем небольшую программу-опросник. Зададим набор вопросов и соберем ответы. Вопросы и ответы будем хранить в массивах.

-2

Что здесь происходит:

  • мы настраиваем сканер, чтобы собирать ответы пользователя
-3
  • дальше определяем переменную questions, как массив строк String[], создаем массив с длинной 4 (открываем и закрываем скобки {}), каждую ячейку массива инициализируем строкой (4 строки внутри фигурных скобок). Здесь записываем вопросы, которые мы будем задавать пользователю.
-4
  • определяем переменную titles, присваиваем ей ссылку на массив из 4-х строк. Это пояснения для ответов.
-5
  • теперь определяем переменную answers и присваиваем ей ссылку на массив строк, куда мы будем сохранять ответы.
questions.length - размер массива с вопросами.
new String[10] - создать массив (выделить память под массив) из 10 элементов.
new String[questions.length] - создать массив такой же длины, как и массив questions

-6
  • здесь последовательно печатаем 3 строки с пояснениями о нашей программе.
System.out.println() - печатает пустую строку

-7
  • печатаем строку и ждем когда пользователь нажмет интер
scanner.nextLine() - считать строку, которую введет пользователь

-8
  • итерируем по массиву вопросов, на каждой итерации задаем вопрос, считываем ответ пользователя и сохраняем в массив ответов.
String quest = questions[i] - берем значение из i-ой ячейки и записываем в переменную quest
System.out.println(quest) - выводим вопрос
String answer = scanner.nextLine() - считываем ввод пользователя
answers[i] = answer - записываем ответ в i-тую ячейку массива ответов

-9
  • выводим поясняющий текст
-10
  • выводим ответы из массива answers и пояснения из массива titles.
"%s : %s \n" - шаблон для 2-х строковых значений
%s - строковое значение
\n - специальный символ, который переводит курсор на новую строку

-11

Определение массива

-12

где:

  • тип_элемента_массива - примитивный тип, другой массив или класс
  • [] - маркер, что это массив
  • <название_переменной> - название, как и для других типов переменных

Например:

  • byte[] arBytes; - массив байтов
  • short[] arShorts; - массив шортов
  • long[] arLongs; - массив лонгов
  • float[] arFloats; - массив флоатов
  • double[] arDoubles; - массив даблов
  • boolean[] arBooleans; - массив логических значений
  • char[] arChars; - массив символов
  • String[] arStrings; - массив строк

Создание массивов

Мы можем создать массив несколькими способами:

  • int[] ar = new int[10] - создать массив, содержащий int значения, на 10 элементов
  • int[] ar = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} - создаем массив из 10 int значений; длина массива выводится из кол-ва заданных элементов
  • int[] ar = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} - создаем массив из 10 int значений; длина массива так же выводится из кол-ва заданных элементов

В чем отличие записей int [] ar = new int[]{...} и int[] ar = {...}? В том, что int[] ar = {...} мы можем использовать для переменной только 1 раз, при определении переменной, как инициализирующая часть. В то время, как c new int[]{...} мы можем создать новый массив и присвоить ссылку на него уже проинициализированной переменной.

Сравните:

-13

и

-14

и чуть подробнее, чтобы убедиться, что переменная ar будет содержать ссылки на разные объекты (разная длина, разные элементы)

-15

Если мы создаем массив конструкцией int[] ar = new int[10], то компилятор выделяет память на 10 элементов и инициализирует каждый элемент значением по-умолчанию (дефолтным значением). Для int дефолтное значение 0.

-16

Проверьте код выше - выведет 10 нулей.

Итерация по массиву

Для итерации по массиву (пройтись по всем элемента) есть удобная конструкция foreach

-17

или

-18

на каждой итерации создается новая локальная переменная, область видимости которой только конструкция for.

Так же опираясь на встроенные свойства массива:

  • доступ к элементу по индексу, например ar[8]
  • индексы начинаются с 0
  • length возвращает длину массива

по массиву можно проитерировать с помощью любой конструкции цикла (for, while, do-while).

Пример для for:

-19

Многомерные массивы

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

Например двумерный массив:

-20

Или 3-х мерный массив, если берем двумерный String[][] как элемент:

-21

Задание:

  • проитерируйте по массиву int[] ar = {1, 2, 3}, используя конструкцию while
  • скопируйте и запустите программу-опросник, попробуйте изменить вопросы, добавьте новые
  • перепишите программу-опросник, с многомерными массивами. Уберите два отдельных массива titles, answers, используйте один многомерный массив, чтобы хранить пары title, answer

конструкция для хранения title, answer:

-22

Полезные ссылки: