Как правильно инициализировать многомерные массивы динамически в Java? - PullRequest
0 голосов
/ 10 апреля 2019

Q.Как динамически инициализировать массивы в Java?

Я пытаюсь сохранить некоторые показатели в массивах, используя следующий код.

 public static void main (String[] args) {
    Scanner in = new Scanner(System.in);
    int t = in.nextInt(); // outer metric size 
    int [] n = new int[t]; // inner square metric e.g. 3x3
    int [][][] a = new int[t][][]; // e.g. 2x3x3, 10x3x3

    //input block
    for (int h=0; h<t; h++){
        n[h] = in.nextInt(); //inner square metric dimensions
        for (int i=0;i<n[h];i++){
            for (int j=0;j<n[h];j++){
                a[h][i][j] = in.nextInt();    //metric values
            }
        }
    }

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

  int [] n = new int[70];
  int [][][] a = new int[70][10][10];

Поэтому я хотел бы понять, как правильно инициализировать динамические массивы.

1 Ответ

1 голос
/ 10 апреля 2019

Вы должны выделить новый int[][] во внешнем цикле. Что-то вроде

n[h] = in.nextInt(); //inner square metric dimensions
a[h] = new int[n[h]][n[h]]; //add this
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...