Работа с массивами в Java

User Rating: 5 / 5

Сегодня мы посмотрим на пример работы с массивами в Java. Массив - это выделенная область памяти в виде последовательных "ячеек", в которых хранятся значения того типа, с которым объявлен массив. Доступ к массиву производится по индексу, который начинается с 0. Т.е. если у нас есть целочисленный массив a, состоящий из 10 элементов, то доступ к первому элементу осуществляется через a[0], ко второму - через a[1], к последнему - через a[9].

Ниже небольшая программа ArraysExample на Java, которая демонстрирует возможности определения и инициализации целочисленных массивов типа int:

package ru.allineed.samples.arrays;

public class ArraysExample {
    public static void main(String[] args) {
        int[] a1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int a2[] = {-1, 22, 37};

        for (int i = 0; i < a1.length; i++) {
            System.out.print((i > 0 ? " " : "") + a1[i]);
        }
        System.out.println();

        for (int i = 0; i < a2.length; i++) {
            System.out.print((i > 0 ? " " : "") + a2[i]);
        }
        System.out.println();

        int[] a3 = new int[a1.length];
        for (int i = 0; i < a3.length; i++) {
            a3[i] = i * (i + 1);
            System.out.print((i > 0 ? " " : "") + a3[i]);
        }

        // [RU] Статическое определение элементов двумерного массива
        // [EN] Static initialization of two-dimensional array
        int[][] b1 = {{1, 2}, {3, 4}, {5, 6}};
        for (int i = 0; i < b1.length; i++) {
            System.out.println();
            for (int j = 0; j < b1[i].length; j++) {
                System.out.print(b1[i][j] + " ");
            }
        }

        // [RU] Можно также динамически выделить память под массив, не определяя его элементы сразу
        // [EN] You can also allocate the memory for the array dynamically, without initializing its elements at once
        int[][] b2 = new int[3][3];

        // [RU] Задаём значения массива динамически в циклах
        // [EN] Set the values for the array elements dynamically in two 'for' loops
        for (int i = 0; i < b2.length; i++) {
            for (int j = 0; j < b2[i].length; j++) {
                b2[i][j] = i + j;
            }
        }

        // [RU] Выводим значения массива
        // [EN] Print the values of the array elements
        for (int[] b2_lines : b2) {
            System.out.println();
            for (int b2_cell_value : b2_lines) {
                System.out.print(b2_cell_value + " ");
            }
        }
    }
}

Первые два массива a1, a2 инициализированы статически с указанием их значений. Память под третий массив a3 выделяется динамически через оператор new и размером, равным размеру массива a1 за счёт указания в квадратных скобках a1.length. Расчёт значений для элементов массива a3 производится прямо в цикле по его элементам - как видим очередному элементу присваиваем значение индекса, умноженного на выражение (индекс_элемента + 1) - т.е. a3[i] = i * (i + 1).

При запуске программы на консоль в первых трёх строках будут выведены элементы трёх массивов a1, a2, a3:

1 2 3 4 5 6 7 8 9 10
-1 22 37
0 2 6 12 20 30 42 56 72 90

В примере выше для задания массивов a1, a2, a3 был использован одномерный массив типа int. В Java также есть и возможность задания многомерных массивов, что продемонстрировано на примере определения массивов с именами b1 и b2:

        // [RU] Статическое определение элементов двумерного массива
        // [EN] Static initialization of two-dimensional array
        int[][] b1 = {{1, 2}, {3, 4}, {5, 6}};
        // [RU] Можно также динамически выделить память под массив, не определяя его элементы сразу
        // [EN] You can also allocate the memory for the array dynamically, without initializing its elements at once
        int[][] b2 = new int[3][3];

Из отличий - дополнительная пара квадратных скобок и отдельный уровень вложенности с фигурными скобками внутри внешних фигурных скобок - в случае статического определения массива. В первой строке примера можно сказать, что мы задали массив int[3][2], т.е. для доступа, например, к элементу 5 этого двумерного массива, нужно будет написать b1[2][0].

Двумерный массив ещё называют матрицей, он может быть представлен в виде таблицы, где первый индекс указывает на номер строки, а второй индекс указывает на номер столбца. Это упрощает визуальное восприятие того, как расположены элементы матрицы. Например:

// 1  2
// 3  4
// 5  6

Если выписать все элементы матрицы таким образом, становится понятно, почему для получения элемента 5 используется запись b1[2][0] - поскольку нумерация индексов для конкретной размерности массива начинается с 0, то 3-я строка соответствует индексу 2, а 1-й столбец соответствует индексу 0, поэтому это именно b1[2][0], а не b1[3][1], как может показаться для тех, кто не привык, что нумерация диапазонов начинается с нуля.

После определения двумерных массивов b1 и b2, а также инициализации массива b2 в отдельном цикле, мы выводим элементы обоих массивов на экран. На вашей консоли во второй части вывода вы должны увидеть следующее:

1 2 
3 4
5 6
0 1 2
1 2 3
2 3 4

Надеюсь, что эта короткая статья дала общее понимание того, как использовать одномерные и многомерные массивы в Java. Если остались какие-то вопросы, напишите их в комментариях к статье.

Яндекс.Метрика