Двумерные массивы в Java 17: подробное руководство
Двумерные массивы в Java
Что такое двумерный массив?
Представь себе шахматную доску или таблицу в Excel. У каждой клетки есть две координаты: номер строки и номер столбца. Двумерный массив — это такая же таблица, только хранящая данные (числа, символы, строки).
Зачем это нужно? Например, чтобы хранить:
- Схему зала кинотеатра (ряды и места)
- Карту острова с сокровищами
- Таблицу лайков у блогеров
- Данные о товарах на складе
Простыми словами: это массив массивов. Сначала мы указываем строку, а внутри неё — столбцы.
Как объявить и создать двумерный массив?
Общий синтаксис:
тип_данных[][] имя_массива = new тип_данных[количество_строк][количество_столбцов];
Пример: создадим массив 3×2 (3 строки, 2 столбца) для хранения оценок:
int[][] оценки = new int[3][2];
// Заполним значениями
оценки[0][0] = 5; // первая строка, первый столбец
оценки[0][1] = 4; // первая строка, второй столбец
оценки[1][0] = 3;
оценки[1][1] = 5;
оценки[2][0] = 4;
оценки[2][1] = 4;
Можно создать и сразу заполнить:
int[][] числа = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
Обрати внимание: числа[0][0] = 1, числа[1][2] = 6, числа[2][1] = 8.
Ввод и вывод двумерного массива
Создадим программу, которая запрашивает размеры и заполняет массив с клавиатуры:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Введите количество строк: ");
int строки = scanner.nextInt();
System.out.print("Введите количество столбцов: ");
int столбцы = scanner.nextInt();
int[][] массив = new int[строки][столбцы];
// Заполняем массив
System.out.println("Введите элементы построчно:");
for (int i = 0; i < строки; i++) {
for (int j = 0; j < столбцы; j++) {
массив[i][j] = scanner.nextInt();
}
}
// Выводим массив в виде таблицы
System.out.println("Ваш массив:");
for (int i = 0; i < строки; i++) {
for (int j = 0; j < столбцы; j++) {
System.out.print(массив[i][j] + " ");
}
System.out.println(); // переход на новую строку
}
}
}
Пример работы программы:
Введите количество строк: 2
Введите количество столбцов: 3
Введите элементы построчно:
1 2 3
4 5 6
Ваш массив:
1 2 3
4 5 6
Разбор типичной задачи: "Кинозал Уют"
В этой задаче нужно создать схему зала. У нас есть ряды (строки) и места (столбцы). Пусть свободные места обозначаются символом 'O', а занятые — 'X'.
import java.util.Scanner;
public class Cinema {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Введите количество рядов: ");
int ряды = scanner.nextInt();
System.out.print("Введите количество мест в ряду: ");
int места = scanner.nextInt();
char[][] зал = new char[ряды][места];
// Заполняем все места как свободные
for (int i = 0; i < ряды; i++) {
for (int j = 0; j < места; j++) {
зал[i][j] = 'O';
}
}
// Выводим схему зала
System.out.println("Схема зала:");
for (int i = 0; i < ряды; i++) {
for (int j = 0; j < места; j++) {
System.out.print(зал[i][j] + " ");
}
System.out.println();
}
}
}
Пример работы:
Введите количество рядов: 3
Введите количество мест в ряду: 4
Схема зала:
O O O O
O O O O
O O O O
Ещё один пример: "Популярность постов"
У нас есть блогеры (строки) и их посты (столбцы). Нужно подсчитать общее количество лайков:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Количество блогеров: ");
int блогеры = scanner.nextInt();
System.out.print("Количество постов у каждого: ");
int посты = scanner.nextInt();
int[][] лайки = new int[блогеры][посты];
// Вводим данные
System.out.println("Введите количество лайков для каждого поста:");
for (int i = 0; i < блогеры; i++) {
System.out.println("Блогер " + (i+1) + ":");
for (int j = 0; j < посты; j++) {
лайки[i][j] = scanner.nextInt();
}
}
// Считаем общее количество лайков
int всего = 0;
for (int i = 0; i < блогеры; i++) {
for (int j = 0; j < посты; j++) {
всего += лайки[i][j];
}
}
System.out.println("Всего лайков: " + всего);
}
}
Пример работы:
Количество блогеров: 2
Количество постов у каждого: 3
Введите количество лайков для каждого поста:
Блогер 1:
10 20 15
Блогер 2:
5 30 25
Всего лайков: 105
Частые ошибки новичков
- Выход за границы массива: если массив размером 3×2, то индексы строк — от 0 до 2, столбцов — от 0 до 1. Обращение к
массив[3][0]вызовет ошибку. - Путаница строк и столбцов: первый индекс — строка, второй — столбец.
массив[строка][столбец]. - Забыть вложенный цикл: для обхода всего массива нужно два цикла — один для строк, другой для столбцов внутри.
- Неправильное объявление:
int[][] arr = new int[][5];— так нельзя, нужно указать количество строк.
Итоговый пример: "Карта острова Капитана Сильвера"
На карте символ 'S' — сокровище, '.' — пустое место. Найдём координаты сокровища:
import java.util.Scanner;
public class TreasureMap {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Введите размер карты (строки и столбцы): ");
int строки = scanner.nextInt();
int столбцы = scanner.nextInt();
char[][] карта = new char[строки][столбцы];
System.out.println("Введите карту построчно (S - сокровище, . - пусто):");
for (int i = 0; i < строки; i++) {
String строка = scanner.next();
for (int j = 0; j < столбцы; j++) {
карта[i][j] = строка.charAt(j);
}
}
// Ищем сокровище
boolean найдено = false;
for (int i = 0; i < строки; i++) {
for (int j = 0; j < столбцы; j++) {
if (карта[i][j] == 'S') {
System.out.println("Сокровище найдено! Строка: " + (i+1) + ", Место: " + (j+1));
найдено = true;
}
}
}
if (!найдено) {
System.out.println("Сокровище не найдено!");
}
}
}
Пример работы:
Введите размер карты (строки и столбцы): 3 3
Введите карту построчно (S - сокровище, . - пусто):
...
.S.
...
Сокровище найдено! Строка: 2, Место: 2
Коротко о главном
- Двумерный массив — это таблица с рядами и столбцами.
- Объявление:
тип[][] имя = new тип[строки][столбцы]; - Обращение к элементу:
имя[строка][столбец] - Для обхода нужно два вложенных цикла.
- Индексы начинаются с 0.
Попробуй решить задачи сам — это поможет закрепить тему!