Как построить массив внутри частного Fuction с нуля? - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь построить массив внутри приватной функции, которая получает пустой массив из публичной функции, я вызываю приватную функцию из публичной, а затем пытаюсь сделать arr[i][j] = 1, а затем рекурсия добавится к int j +1, но когда я arr[i][j] = 1 получаю ошибку времени выполнения: NullPointerException, я не знаю arr[0].length, я знаю только, что arr.length - это n, какое-либо исправление?

public static int howManySorted(int n, int max) 
{
     int i = 0;
     int j = 0;
     boolean first = false;
     int count = 0;
     int[][] arr = new int[n][];



     return howManySorted(n,max,arr,i,j,first,count);
}
private static int howManySorted(int n,int max,int[][] arr,int i,int j,boolean first,int count)
{
    if(n < 1)
        return 0;

    if(j < n)
    {
        arr[i][j] = 1;
        count++;
        first = true;
        return howManySorted(n,max,arr,i,j+1,first,count);
    }

Ответы [ 2 ]

0 голосов
/ 06 января 2019

массив, который инициализируется следующим образом

int[][] arr = new int[n][];

не полностью инициализирован, и вы не можете присвоить значения ячейкам. это определение равно этому: «массив, каждая ячейка которого определена как массив», поэтому каждая ячейка также должна быть инициализирована (она не должна быть одинакового размера) вам нужно либо полностью инициализировать массив массивов, например так:

int[][] arr = new int[n][n];  // a nxn sized matrix

или, альтернативно, вы можете инициализировать каждую строку индивидуально, например:

arr[0] = new int[n];  // initialized one cell of arr
0 голосов
/ 06 января 2019

Исключение исчезает при изменении строки кода

int[][] arr = new int[n][];

в

int[][] arr = new int[n][n];

Когда вы делаете new int[n][], он создает массив nulls, а выполнение arr[i][j] похоже на выполнение null[j], что приводит к NullPointerException

В качестве альтернативы, вы также можете сделать,

arr[i] = new int[10];  // initialize internal array 

перед выполнением

arr[i][j] = 1 // assign value
...