46. Рекурсия
Теория
Двумерные массивы в java – это всегда массивы массивов, поэтому они имеют схожую инициализацию и реализацию обращения к элементу по индексу.
int arr[][];
Объявляется переменная точно так же, как и одномерный массив, но при помощи двух пар квадратных скобок.
Инициализировать двумерный массив можно разными способами.
Задать значения массива явно:
int arr[][] ={
{1,6,-2,3},
{1,0,-1,2,3,4},
{-5,0,0}
};
Можно указать только кол-во строк в массиве:
int arr [][] = new int[5][];
После чего выделять память для каждой строки(не последовательность символов, а массив внутри массива) по отдельности:
arr[0] = new int[5];
arr[3] = new int[2];
Если у массива каждая строка имеет одинаковую длину, то такой массив называется прямоугольным.
Если кол-во строк у прямоугольного массива совпадает с кол-вом столбцов, то массив называется квадратным.
У квадратного массива есть две диагонали. Главная диагональ представлена на рисунке слева, побочная справа.
Попробуем инициализировать массив значениями явно, после чего вывести все элементы массива построчно.
Для этого стоит воспользоваться конструкцией for...each, которую мы проходили уже ранее. Т.к. двумерный массив - это массив массивов, то for...each перебирает все строки двумерного массива, поэтому нам нужно реализовать ещё и вложенный for...each.
public class Main {
public static void main(String[] args) {
int arr[][] ={
{1,6,-2,3},
{1,0,-1,2,3,4},
{-5,0,0}
};
for(int[] ar:arr){
for(int a:ar){
System.out.print(a+" ");
}
System.out.println();
}
}
}
На консоль будет выведено:
1 6 -2 3
1 0 -1 2 3 4
-5 0 0
Попробуем решить другую задачу: с клавиатуры вводится два целых числа n и m, требуется создать массив nxm и заполнить его элементами, равными сумме номера строки и номера столбца.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int arr [][] = new int [n][m];
for (int i=0;i<arr.length;i++){
for (int j=0;j<arr[i].length;j++)
arr[i][j] = i+j;
}
}
}
Обратите внимание, что в первом for мы используем .length, чтобы получить кол-во строк, а во втором, чтобы получить кол-во элементов в конкретной строке.
Задание
- Дана матрица размера и целое число . Найти сумму и произведение элементов K-й строки данной матрицы.
- Дана матрица размера и целое число . Найти сумму и произведение элементов -го столбца данной матрицы.
- Дана матрица размера . Для каждой строки матрицы найти сумму ее элементов.
- Дана матрица размера . Для каждого столбца матрицы с четным номером найти сумму его элементов. Условный оператор не ис-пользовать.
- Дана матрица размера . В каждой строке матрицы найти минимальный элемент.
- Дана матрица размера . Найти номер ее строки с наибольшей суммой элементов и вывести данный номер, а также значение наибольшей суммы.
- Дана матрица размера . Найти максимальный среди минимальных элементов ее строк.