Массивы (одномерные)
Во многих задачах нужно хранить не одно число, а целую последовательность:
оценки ученика, результаты замеров, элементы ряда, высоты столбиков на диаграмме.
Держать десятки отдельных переменных неудобно. Для этого в Java есть массивы.
Массив — это набор однотипных значений под одним именем, к каждому элементу обращаемся по номеру (индексу).
Краткая сводка
Одномерный массив целых чисел:
int[] a = new int[n]; // создать массив длины n
a[i] = 10; // записать значение в ячейку с индексом i
int x = a[i]; // прочитать значение из ячейки
int len = a.length; // длина массива
Важно:
- индексы идут от
0доa.length - 1; - при выходе за границы (
a[-1],a[n]) будет ошибка во время работы программы; - все элементы нового
int[]по умолчанию равны0.
Идея массива
Без массива:
С массивом:
Теперь можно обращаться к элементам по индексу:
Объявление и создание массива
Общий шаблон:
Примеры:
int n = 10;
int[] a = new int[n]; // массив целых чисел
double[] x = new double[5]; // массив из 5 дробных чисел
boolean[] used = new boolean[100]; // массив логических значений
Сначала указываем тип элементов и [], затем имя массива, затем создаём массив нужной длины через new.
Чтение массива из ввода
Частый случай: сначала во входе дано число n — сколько элементов, а затем n чисел.
import java.util.Scanner;
public class ReadArrayExample {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt(); // количество элементов
int[] a = new int[n]; // создаём массив
for (int i = 0; i < n; i++) {
a[i] = in.nextInt(); // читаем i-й элемент
}
// вывод массива
for (int i = 0; i < n; i++) {
System.out.println(a[i]);
}
}
}
Важный момент: цикл по индексу почти всегда идёт от 0 до n - 1.
Примеры и типичные шаблоны
Сумма элементов массива
int n = in.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = in.nextInt();
}
int sum = 0;
for (int i = 0; i < n; i++) {
sum = sum + a[i]; // или sum += a[i];
}
System.out.println(sum);
Минимум и максимум в массиве
int n = in.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = in.nextInt();
}
int min = a[0];
int max = a[0];
for (int i = 1; i < n; i++) {
if (a[i] < min) {
min = a[i];
}
if (a[i] > max) {
max = a[i];
}
}
System.out.println("min = " + min);
System.out.println("max = " + max);
Подсчёт количества элементов по условию
int n = in.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = in.nextInt();
}
int countPositive = 0;
for (int i = 0; i < n; i++) {
if (a[i] > 0) {
countPositive++;
}
}
System.out.println(countPositive);
Поиск элемента в массиве
int n = in.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = in.nextInt();
}
int key = in.nextInt(); // кого ищем
boolean found = false;
for (int i = 0; i < n; i++) {
if (a[i] == key) {
found = true;
break;
}
}
if (found) {
System.out.println("YES");
} else {
System.out.println("NO");
}
Что нужно запомнить
Одномерный массив — это набор значений одного типа, доступ к каждому по индексу:
Индексы идут от 0 до a.length - 1, выход за границы массива приводит к ошибке.
Типичные шаблоны работы с массивом: чтение в цикле, проход по всем элементам, вычисление суммы, минимума/максимума, подсчёт количества элементов по условию.