Инициализация 2D-массива только количеством строк

#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);
});