#java #arrays #multidimensional-array #initialization
#java #массивы #многомерный массив #инициализация
Вопрос:
Итак, я немного запутался в том, как использовать 2D-массив в Java, если сначала вы объявляете только количество строк. Например:
int[][] x = new int[5][];
Но как бы вы продолжили заполнять эти 5 строк? Я думаю, вам нужно сначала объявить размер каждой из строк, но я не могу придумать, как это сделать. Если я попытаюсь сделать что-то вроде:
x[0][0] = 5;
Компилятор сообщает мне, что x[0]
это значение равно нулю.
Был бы признателен за помощь, заранее спасибо.
Ответ №1:
вы пытались определить 2d-массив: сначала вы указали номера строк, но не указали количество столбцов и его необходимое.
например, я определил 2 столбца для первой строки и присвоил значение:
int[][] x = new int[5][];
x[0] = new int[2];
x[0][0] = 5;
System.out.println(x[0][0]);
для лучшего понимания 2d-массивов вам необходимо подробнее:
https://www.programiz.com/java-programming/multidimensional-array
Ответ №2:
Элементом 2d-массива является 1d-массив. Если вы определяете массив напрямую new int[5][4]
, то длина каждой строки равна 4
, в противном случае она может отличаться. Когда вы создаете 2d-массив с неопределенной длиной строки, каждый его элемент, фактически 1d-массив, еще не инициализирован и является null
. При создании одномерного массива int[]
он по умолчанию инициализируется нулями. Если вы определяете 2d-массив напрямую, элементы его строк инициализируются нулями.
Инициализация 2d-массива
Вы можете определить длину столбца без длины строки:
int[][] arr = new int[5][];
arr[0] = new int[]{1, 2, 3};
arr[3] = new int[2];
arr[3][1] = 9;
arr[4] = new int[]{3, 3, 2, 1, 6, 7};
// output:
[1, 2, 3]
null
null
[0, 9]
[3, 3, 2, 1, 6, 7]
Вы можете определить длину столбца и строки:
int[][] arr2 = new int[3][3];
arr2[0][0] = 1;
// output:
[1, 0, 0]
[0, 0, 0]
[0, 0, 0]
Вы можете определить каждый элемент 2d-массива во время создания, необязательно с зарезервированными строками для дальнейших операций:
int[][] arr3 = new int[][]{{1, 2, 3}, {4, 5}, {6}, null};
// output:
[1, 2, 3]
[4, 5]
[6]
null
Ответ №3:
Вы не можете получить доступ x[0][0]
, потому что в строке нет столбцов x[0]
. Вам нужно будет инициализировать каждый столбец в строке перед его использованием:
x[0] = new int[5];
x[1] = new int[5];
или используйте цикл:
for (int i = 0; i < 5; i ) {
x[i] = new int[5];
}
Ответ №4:
Просто сделайте это:
public class ClassName {
public static void main(String[] args) {
//Assignment of multi-dimensional array
int[][] multiarray = new int[2][3];
// assign value to row "0" and col "0" index
multiarray[0][0] = 23;
System.out.println("My Age is:" multiarray[0][0]);
}
}
Ответ №5:
int ROWS = 5;
int COLUMNS = 12;
int[][] x = new int[ROWS][];
Инициализируйте значения all ROWS
равными нулю:
IntStream.range(0, ROWS).forEach(i -> {
x[i] = new int[COLUMNS];
});
Если вы хотите инициализировать другое значение, например. -1
:
IntStream.range(0, ROWS).forEach(i -> {
x[i] = new int[COLUMNS];
Arrays.fill(x[i], -1);
});