Объявление массива массивов чрезвычайно похоже на объявление "обычного", "одномерного" массива:
int [] a; //это – одномерный массив
int [] [] b; //это – массив массивов, "двумерный" массив
Тот факт, что "двумерный" массив по сути дела является именно массивом массивов, позволяет инициализировать в каждой ячейке "внешнего" массива "внутренний" массив любого размера.
Например, класс
import java.util.*;
Class primer_arr2_1
{
static Scanner reader = new Scanner(System.in);
public static void main(String[] args)
{
int [] []a=new int[5][];
for (int i=0;i<a.length;i++)
a[i]=new int[i];
for (int i=0;i<a.length;i++)
System.out.println(Arrays.toString(a[i]));
}
}
выполняет следующие действия:
int [] []a=new int[5][]; | Объявляет и инициализируем массив массивов размером в 5 ячеек; при этом уже на этапе объявления указано, что это будет массив массивов. Однако при этом внутренние массивы объявлены (так как дважды использованы квадратные скобки) – но еще не инициализированы. Именно поэтому внешний массив имеет размер (5 ячеек), а внутренние массивы не имеют пока никаких размеров (повторим еще раз – они объявлены, но не инициализированы). |
for (int i=0;i<a.length;i++) a[i]=new int[i]; | Инициализируются внутренние массивы, при этом размер каждого массива устанавливается равным номеру ячейки, с которой он связан. Между прочим, это позволяет создать в ячейке номер 0 ссылку на внутренний массив размером 0… |
for (int i=0;i<a.length;i++) System.out.println(Arrays.toString(a[i])); | Значения, содержащиеся во внутренних массивах, выводятся на экран. Поскольку "сознательно" значения в инициализированные внутренние массивы не заносились, они – "пустые", то есть содержат значения 0 (потому что речь идет о массиве типа int). |
Результат вывода информации на экран при исполнении этого класса:
[]
[0]
[0, 0]
[0, 0, 0]
[0, 0, 0, 0]