Java: Объявление многомерного массива без указания размера массива (например, new int [10] []) - PullRequest
4 голосов
/ 28 марта 2012

Я пытался понять, что именно здесь происходит. Я просто пытаюсь понять, что делают две строки, которые я прокомментировал ниже. Я обнаружил, что эта программа не объявляет полные размеры массива (вместо new int [10] [5]; она просто решает не объявлять его, говоря 'new int [10] [];' Это как 2-й длина массива не имеет значения (изменение его на 1 или 100 не влияет на вывод).

int[][] tri = new int[10][];  //this lack of giving the size of the 2nd array is strange
 for (int r=0; r<tri.length; r++) {
 tri[r] = new int[r+1];   //I'm not sure what this line is doing really 
}
for (int r=0; r<tri.length; r++) {
 for (int a=0; a<tri[r].length; a++) {
     System.out.print(tri[r][a]);  
     }
 System.out.println();
 }

Ответы [ 5 ]

8 голосов
/ 28 марта 2012

Первая строка создает массив массивов int.Всего создано 10 слотов для массивов int.

Третья строка создает новый массив int и помещает его в один из созданных вами слотов.В новом массиве int есть r + 1 пробел для int.

Итак, массив int в позиции 0 будет иметь 1 слот для int.Массив int в позиции 1 будет иметь 2 слота для int.Общая форма будет:

[
    [0],
    [0,0],
    [0,0,0],
    ...,
    [0,0,0,0,0,0,0,0,0,0]
]

, на что намекает имя переменной tri (выглядит как треугольник)

2 голосов
/ 28 марта 2012

Это имеет больше смысла, если вы думаете о многомерном массиве как о массиве массивов:

int [][] tri = new int[10][]; // This is an array of 10 arrays

tri[r] = new int[r+1]; // This is setting the r'th array to
                       // a new array of r+1 ints
2 голосов
/ 28 марта 2012

Все new int[10][] объявляет массив размером 10, содержащий null массивы.

В цикле for массивы null создаются во все увеличивающихся размерах массива.

1 голос
/ 28 марта 2012

Это просто объявление массива из 10 массивов.Длина каждого из этих «под» массивов может быть разной.

0 голосов
/ 28 марта 2012

это не недостаток, это в основном не установка определенной суммы, это не требуется, потому что он может иметь много полей

и вторая строка

tri[r] = new int[r+1];

устанавливает все поля не равными нулю

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...