2013-05-12 5 views
0

Я сделал код с итерацией через одномерный массив объектов типа Point из java.awt.Point. Я попытался заполнить переменные экземпляра x и y каждой точки в массиве с по существу array[iterator].x=iterator.Почему этот код вызывает исключение NullPointerException?

Код

package onmap; 

import java.awt.Point; 

public class OnMap { 

    public static void main(String[] args) { 

     int width=50; 
     int height=50; 
     int area = width * height; 
     int xn; 
     int yn; 
     int i=0; 
     int t=0; 
     Point[] map; 
     map = new Point[area]; 
     map[i].x=0; 
     System.out.print("first x:" + map[i].x); 


     for (int n=0; n<area-1;n++){ 
      if (i==width) 
      {i=0; t++;} 
      map[n].x=i; 
      map[n].y=t; 
      i++;  
      } 

     for (int n=0;n<area-1;n++){ 
      xn = map[n].x; 
      yn = map[n].y; 
      System.out.print("x: " + xn); 
      System.out.print(" y: "+yn); 
      System.out.println(" n: "+n); 
      } 


    } 

} 

Я не понимаю. Почему я получаю исключение Null Pointer?
(Netbeans 7,3, Java7)

+3

Включите ваш код непосредственно в вопрос и включите полную трассировку стека вашей ошибки. –

+0

Всегда копировать/вставлять ошибку и вывод исключений. –

ответ

1

вероятно потому, что array[iterator]==null или array==null больше ничего. Почему вы просто не отлаживаете?

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. – alecxe

+0

, потому что он не предоставил код, когда я ответил – Dima

2

Поскольку при инициализации

Point[] map; 
    map = new Point[area]; 

Он содержит весь пустой references.It создает массив Point с каждым элементом в массиве по умолчанию инициализируется в Point element=null .so, когда вы пытаетесь map[0].x это будет, очевидно, бросить NullPointerException как map[0]==null. Обратитесь к JLS, в котором говорится, что примитивные типы в Java всегда инициализируются нулями. Ссылки инициализируются нулевым значением. Таким образом, в массиве ссылок значение по умолчанию для каждого элемента будет null.

Вы должны изменить свои линии, как показано ниже:

Point[] map; 
map = new Point[area]; 
map[i] = new Point(); 
map[i].x=0; 
2

Просто потому, что ваш массив содержит пустые элементы.

У вас есть:

... 
map = new Point[area]; 
map[i].x=0; 
... 

предположим, что, area = 2, ваш массив будет:

map[0] = null; 
map[1] = null; 

Вы можете это исправить, выполнив следующие изменения:

... 
map = new Point[area]; 
// initialize Point array 
for (int k=0; k < area; k++) { 
    map[k] = new Point(); 
} 
// ends initialization 
map[i].x = 0; 
... 
0

Следующая строка отсутствует: map[n] = new Point();, прежде чем выполнять какие-либо операции над объектами массива, поскольку они равны нулю a т этот момент.

1

Вы получаете NullPointerException, потому что:

Вы создали массив точечных объектов и инициализировать объект точки следует создать точечный объект первым, используя новое ключевое слово. Но здесь вы не создаете память для точечных объектов, что является причиной этого исключения.

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