☕ Java

Массивы (списки) в Java 17: подробное руководство

Массивы (списки) в Java

Что такое массив и зачем он нужен?

Представь, что у тебя есть рюкзак, в который можно сложить много вещей: книги, тетради, ручки. В программировании такой «рюкзак» называется массивом (или списком). Массив — это контейнер, который хранит несколько значений одного типа (например, только числа или только строки) под одним именем.

Зачем это нужно? Допустим, тебе нужно записать 100 оценок учеников. Если бы массивов не было, пришлось бы создавать 100 отдельных переменных: оценка1, оценка2… Это неудобно! Массив позволяет хранить все данные в одной переменной и обращаться к любому элементу по его номеру (индексу).

Основной синтаксис

В Java массив — это объект. Его можно создать двумя способами:

// Способ 1: сразу указать значения
int[] числа = {10, 20, 30, 40};

// Способ 2: сначала объявить, потом заполнить
String[] фрукты = new String[3];
фрукты[0] = "Яблоко";
фрукты[1] = "Груша";
фрукты[2] = "Банан";

Важно запомнить:

  • Нумерация элементов начинается с 0 (первый элемент — индекс 0, второй — индекс 1 и т.д.)
  • Размер массива задаётся один раз и не может быть изменён
  • Все элементы должны быть одного типа

Пример работы с массивом (ввод и вывод):

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Создаём массив из 5 чисел
        int[] числа = new int[5];
        
        // Заполняем массив с клавиатуры
        System.out.println("Введите 5 чисел:");
        for (int i = 0; i < 5; i++) {
            числа[i] = scanner.nextInt();
        }
        
        // Выводим все элементы
        System.out.println("Вы ввели:");
        for (int i = 0; i < 5; i++) {
            System.out.print(числа[i] + " ");
        }
    }
}

Как решать задачи с массивами

Рассмотрим типичные задачи, похожие на те, что тебе предстоит решать.

Задача 1: «Фрукты» (создание и вывод списка)

Условие: владелец магазина записывает фрукты каждый день. Нужно вывести все фрукты за неделю.

import java.util.Scanner;

public class Fruits {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] фрукты = new String[7]; // 7 дней в неделе
        
        System.out.println("Введите названия фруктов на каждый день:");
        for (int i = 0; i < 7; i++) {
            System.out.print("День " + (i + 1) + ": ");
            фрукты[i] = scanner.nextLine();
        }
        
        System.out.println("Список всех фруктов за неделю:");
        for (int i = 0; i < фрукты.length; i++) {
            System.out.println(фрукты[i]);
        }
    }
}

Задача 2: «Робот-сортировщик» (поиск по условию)

Условие: нужно найти все детали с номерами больше 100.

import java.util.Scanner;

public class RobotSorter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] номера = new int[5];
        
        System.out.println("Введите 5 серийных номеров деталей:");
        for (int i = 0; i < 5; i++) {
            номера[i] = scanner.nextInt();
        }
        
        System.out.println("Детали для сборки (номер > 100):");
        for (int i = 0; i < номера.length; i++) {
            if (номера[i] > 100) {
                System.out.println("Деталь с номером " + номера[i]);
            }
        }
    }
}

Задача 3: «Запас материалов» (изменение элемента)

Условие: во втором пункте списка (индекс 1) нужно удвоить количество хлеба.

import java.util.Scanner;

public class Materials {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] запасы = new int[4];
        
        System.out.println("Введите количество продуктов (хлеб, молоко, яйца, масло):");
        for (int i = 0; i < 4; i++) {
            запасы[i] = scanner.nextInt();
        }
        
        // Удваиваем количество хлеба (индекс 1 — второй элемент)
        запасы[1] = запасы[1] * 2;
        
        System.out.println("Обновлённые запасы:");
        System.out.println("Хлеб: " + запасы[0]);
        System.out.println("Молоко: " + запасы[1]);
        System.out.println("Яйца: " + запасы[2]);
        System.out.println("Масло: " + запасы[3]);
    }
}

Задача 4: «Суп в школе» (подсчёт суммы)

Условие: нужно посчитать, сколько всего порций супа приготовили за неделю.

import java.util.Scanner;

public class Soup {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] порции = new int[5]; // 5 рабочих дней
        
        System.out.println("Введите количество порций супа за каждый день:");
        for (int i = 0; i < 5; i++) {
            System.out.print("День " + (i + 1) + ": ");
            порции[i] = scanner.nextInt();
        }
        
        int всего = 0;
        for (int i = 0; i < порции.length; i++) {
            всего = всего + порции[i];
        }
        
        System.out.println("Всего порций супа за неделю: " + всего);
    }
}

Задача 5: «Юный альпинист» (поиск максимума)

Условие: определить, в какие дни высота была больше 2000 метров.

import java.util.Scanner;

public class Climber {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] высоты = new int[7]; // 7 дней
        
        System.out.println("Введите высоту за каждый день:");
        for (int i = 0; i < 7; i++) {
            System.out.print("День " + (i + 1) + ": ");
            высоты[i] = scanner.nextInt();
        }
        
        System.out.println("Дни, когда высота была больше 2000 м:");
        for (int i = 0; i < высоты.length; i++) {
            if (высоты[i] > 2000) {
                System.out.println("День " + (i + 1) + ": " + высоты[i] + " м");
            }
        }
    }
}

Частые ошибки новичков

  • Выход за границы массива (ArrayIndexOutOfBoundsException)
    Самая популярная ошибка! Если массив размером 5, то индексы 0,1,2,3,4. Индекс 5 — уже ошибка.
  • Путаница с индексами
    Помни: первый элемент — это индекс 0, а не 1. Если нужно изменить второй элемент, пиши массив[1].
  • Забыли инициализировать массив
    Если написать int[] числа = new int[5]; и не заполнить, то будут нули. Для строк — null.
  • Использование length без круглых скобок
    У массива это свойство, а не метод: массив.length (без скобок).

Итоговый пример: «Температура за неделю»

Давай решим задачу, похожую на те, что тебя ждут. Условие: мы измеряем температуру каждый день недели. Нужно найти среднюю температуру и вывести дни, когда было холоднее всего (минимальная температура).

import java.util.Scanner;

public class Temperature {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double[] температура = new double[7];
        
        System.out.println("Введите температуру за 7 дней:");
        for (int i = 0; i < 7; i++) {
            System.out.print("День " + (i + 1) + ": ");
            температура[i] = scanner.nextDouble();
        }
        
        // Считаем среднюю температуру
        double сумма = 0;
        for (int i = 0; i < 7; i++) {
            сумма = сумма + температура[i];
        }
        double средняя = сумма / 7;
        System.out.println("Средняя температура за неделю: " + средняя);
        
        // Ищем минимальную температуру
        double минимум = температура[0];
        for (int i = 1; i < 7; i++) {
            if (температура[i] < минимум) {
                минимум = температура[i];
            }
        }
        
        // Выводим дни с минимальной температурой
        System.out.println("Самые холодные дни (температура " + минимум + "°):");
        for (int i = 0; i < 7; i++) {
            if (температура[i] == минимум) {
                System.out.println("День " + (i + 1));
            }
        }
    }
}

Массивы — это мощный инструмент, который помогает хранить и обрабатывать много данных. Потренируйся решать задачи, и ты быстро освоишь эту тему!