2013-06-05 5 views
0

У меня есть объект, который содержит массив двойников.Ссылка на объект в явном указателе Java

public class NumberRow { 

static final int MAX_AMOUNT_OF_NUMBERS = 2500; 
double[] NumberArray = new double[MAX_AMOUNT_OF_NUMBERS]; 

NumberRow(double[] NumberArray){ 
    this.NumberArray = NumberArray; 
} 

} 

В моей основной программе я начинаю с создания массива объектов NumberRow в конструкторе, как этот

NumberRow[] numberRow; 

позже в программе я ставлю этот код:

numberRow = new NumberRow[dataset.numberOfVariables]; 

После что я вызываю функцию, которая дает значение для числа Row:

double misc = in.nextDouble(); 
numberRow[k].NumberArray[i] = misc; 

Я действительно говорил, на что указывает NumberRow. Однако затмение дает мне пустой указатель указатель исключение на этой линии:

numberRow[k].NumberArray[i] = misc; 

Я надеюсь, что кто-то может увидеть, что я сделал не так? Спасибо :)!

+0

dataset.numberOfVariables == 0? – ssedano

+2

Эти маленькие отдельные биты кода очень сбивают с толку. Пожалуйста, постройте простой, но полный тестовый сценарий. –

+0

'double [] NumberArray = новый double [MAX_AMOUNT_OF_NUMBERS];' никогда не используется, потому что вы перераспределяете его в конструкторе: 'this.NumberArray = NumberArray;'. Вы уверены, что это то, что вы намеревались? – assylias

ответ

0

Это распространенная ошибка, которую я вижу, когда начинающие начинают использовать массивы объектов. Когда массив ссылок на объекты создается, массив инициализируется, но отдельные элементы в массиве: null. Так, в заявлении numberRow[k].NumberArray[i] = misc;, numberRow[k] есть null, что вызывает исключение. Поэтому перед линией необходимо подать заявление

numberRow[k] = new NumberRow(); 

перед вышеуказанным утверждением.

1

Когда вы сделаете это:

numberRow = new NumberRow[dataset.numberOfVariables];

Все члены массива numberRow инициализируются значением по умолчанию NumberRow. NumberRow - это класс, поэтому его значение по умолчанию равно null. Чтобы установить значения на то, что является нулевым, вы должны сначала инициализировать его на реальный объект new или вы получите исключение NullPointerException.

Смежные вопросы