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

Тренажер по Java для пользователей с начальным уровнем подготовки.

Тренажер по Java

Многомерные массивы в Java — это массивы, элементы которых сами являются массивами. Чаще всего это «таблицы» (2D), но возможны и 3D. Важно помнить: в Java это не матрица как единый блок, а массив массивов, поэтому строки могут иметь разную длину (рваные массивы). Доступ идёт по индексам: a[i][j]. Тема нужна для задач java онлайн: обработка таблиц, сеток, оценок, пикселей. В тренажере — примеры, тесты и задания на чтение/заполнение/обход, чтобы понять как работает код.

Пример:

int[][] m = {{1,2,3},{4,5,6}};
int x = m[1][2];

Список тем

1. Объявление и обращение к 2D-массиву

id: 40461_md_01_select_fill_declare

Перед вами короткий фрагмент Java-кода с пропусками. Нужно собрать корректный пример работы с двумерным массивом: выбрать правильный тип для 2D-массива, правильно создать его через new с двумя размерами и обратиться к элементу по двум индексам. Заполните каждый пропуск, выбирая подходящий вариант из выпадающего списка; некоторые варианты специально похожи, но приводят к неверному коду.

Нужно правильно расставить в пропуски предложенные варианты
public class md_01_select_fill_declare {
    public static void main(String[] args) {
        input1S matrix = input2S;
        matrix[1][2] = 7;
        int value = matrix[input3S][input4S];
        System.out.println(value);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Индексы в a[i][j]

id: 40461_md_02_replace_access

В этом задании нужно восстановить корректное обращение к элементу двумерного массива в форме a[i][j]. В коде уже задана «таблица» (2D-массив) с известными значениями. Заполните пропуски так, чтобы программа скомпилировалась и вывела на экран число, которое находится во 2-й строке и 3-м столбце таблицы (строки и столбцы считаются как обычно в задачах, начиная с 1).

Заполните пропуски
public class md_02_replace_access {
    public static void main(String[] args) {
        int[][] table = {
                {10, 20, 30},
                {40, 50, 60}
        };
        System.out.println(input1S[input2S][input3S]);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Исправь ошибку в рваном массиве

id: 40461_md_03_error_jagged

В фрагменте Java-кода создаётся рваный (jagged) двумерный массив: строки имеют разную длину. Затем программа проходит по нему вложенными циклами и выводит все элементы. Сейчас в одной из строк допущена ошибка в условии внутреннего цикла, из-за которой при обходе некоторых строк возникнет исключение. Исправьте только проблемную строку так, чтобы алгоритм обхода остался тем же и код корректно распечатал все значения.

Найдите ошибку и исправьте
public class md_03_error_jagged {
    public static void main(String[] args) {
        int[][] jagged = { {1, 2}, {3, 4, 5}, {6} };
        for (int i = 0; i < jagged.length; i++) {
            for (int j = 0; j < jagged.length; j++) {
                System.out.print(jagged[i][j] + " ");
            }
            System.out.println();
        }
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Что выведет length для 2D-массива

id: 40461_md_04_predict_result_lengths

Проанализируйте фрагмент кода на Java с двумерным (зубчатым) массивом int[][] и тремя вызовами System.out.println, которые выводят длину массива a и длины отдельных строк. Учтите, что строки массива могут иметь разную длину, в том числе нулевую. Выберите один вариант ответа, который в точности соответствует выводу программы в консоль.

Выберите правильный вариант ответа
class Main {
    public static void main(String[] args) {
        int[][] a = {
            {1, 2, 3},
            {4},
            {},
            {5, 6}
        };

        System.out.println(a.length);
        System.out.println(a[1].length);
        System.out.println(a[2].length);
    }
}
Сообщения
Проверить
Показать подсказку

5. Собери вложенные циклы обхода

id: 40461_md_05_build_from_parts_nested_loops

Из предложенных фрагментов соберите корректный фрагмент Java-кода с вложенными циклами, который объявляет двумерный массив int[][] matrix, затем с помощью внешнего цикла по строкам и внутреннего цикла по столбцам обходит все элементы массива, выводя элементы одной строки в одну строку через пробел и после каждой строки переносит курсор на новую строку. Одна строка с некорректным индексированием лишняя и не должна попадать в решение.

Перетяните в правильном порядке строки из одного блока в другой
int[][] matrix = { {1, 2, 3}, {4, 5, 6} };
for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}
        System.out.print(matrix[j][i] + " ");
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Отметь все обращения к элементам 2D-массива

id: 40461_md_06_click_target_2d_parts

Перед вами фрагмент кода на Java с объявлением и использованием двумерного массива matrix. Внимательно изучите циклы и выражения внутри них. Ваша задача — выделить все обращения к отдельным элементам двумерного массива, то есть такие фрагменты, где используются две пары квадратных скобок подряд. Не выделяйте выражения, которые обращаются только к длине измерений массива, а также имя массива без индексов и другие части кода.

Кликните по всем фрагментам, которые подходят под условие задания.
int[][] matrix = new int[3][4];
for (int i = 0; i < {{matrix.length~|~t1}}; i++) {
    for (int j = 0; j < {{matrix[i].length~|~t2}}; j++) {
        {{matrix[i][j]~|~t3}} = i + j;
    }
}

int sum = 0;
for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        sum += {{matrix[i][j]~|~t4}};
    }
}
System.out.println({{matrix~|~t5}});
Сообщения
Проверить
Показать подсказку

7. Сумма элементов одной строки

id: 40461_md_07_give_result_sum_row

Рассмотрите фрагмент Java-кода с двумерным массивом int[][], в котором с помощью цикла вычисляется сумма элементов одной строки и результат выводится на экран. Не изменяйте код мысленно, просто аккуратно проследите выполнение программы: какая строка берётся, какие значения в ней содержатся и как они накапливаются в переменной sum. Введите в поле одно целое число — то, которое будет напечатано методом System.out.println().

Что должно получиться?
public class Main {
    public static void main(String[] args) {
        int[][] matrix = {
            {3, 5, 7},
            {1, 4, 9},
            {2, 6, 8}
        };

        int rowIndex = 1;
        int sum = 0;
        for (int i = 0; i < matrix[rowIndex].length; i++) {
            sum += matrix[rowIndex][i];
        }

        System.out.println(sum);
    }
}
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру