Java, используя массив точек - PullRequest
4 голосов
/ 12 октября 2010

Я пишу программу на Java, в которой я определяю класс

class Point
{
    double x;
    double y;
}

Затем в методе я определяю массив точек следующим образом:

Point[]     line = new Point[6];

В этом же методе у меня есть строка

line[SampleSize - i + 1].x = i;

При первом обращении к этому выражению значение его индекса массива равно 1;но программа выдает исключение нулевого указателя в этой точке.

Это может показаться правильным способом индексации поля объекта в массиве объектов.Что я делаю не так?

Заранее благодарен за любые предложения.

Джон Донер

Ответы [ 7 ]

4 голосов
/ 12 октября 2010
Point[]     line = new Point[6];

создает пустой массив, способный содержать очки. Но пока не имеет никакого отношения к Точке. Все нулевые.

line[SampleSize - i + 1].x = i; 

пытается получить доступ к x на null.

4 голосов
/ 12 октября 2010

Это потому, что вы не создали точки для помещения в массив

for (int index = 0; index < line.length; index++)
{
    line[index] = new Point();
}
4 голосов
/ 12 октября 2010

Вы должны инициализировать значение перед обращением к нему:

line[SampleSize - i + 1] = new Point();
3 голосов
/ 12 октября 2010

Просто чтобы добавить к ответу Бориса, вот код

class Point {
    double x;
    double y;
}


Point[] line = new Point[6];
for(int i = 0; i < line.length; i++) {
    line[i] = new Point();
}

    // now you can set the values, since the point's aren't null
line[0].x = 10;
line[0].y = 10;
2 голосов
/ 12 октября 2010

Несмотря на то, что вы выделили массив, содержимое массива равно нулю.Что нужно сделать:

Point[] line = new Point[6];
for (int i = 0; i < line.length; i++)
{
    line[i] = new Point();
}
2 голосов
/ 12 октября 2010

http://java.sun.com/docs/books/jls/third_edition/html/arrays.html

Если вы заметите, что в разделе 10.2 процесс создания массива просто создает ссылки, но не объекты. Отсюда и причина ошибки нулевого указателя: всем ссылкам присваивается значение по умолчанию, которое в данном случае равно нулю.

1 голос
/ 12 октября 2010

Когда вы впервые создаете массив, он содержит шесть null ссылок.

Прежде чем вы сможете взаимодействовать с объектами в массиве, вам необходимо создать объекты, например:

line[someIndex] = new Point();

Возможно, вы хотите инициализировать каждую точку массива с помощью цикла for.

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