我创建了一个代码,它遍历来自java.awt.Point的Point类型的单维对象数组。我试图用基本上array[iterator].x=iterator
填充数组中每个Point的x和y实例变量。
代码
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);
}
}
}
我不明白。为什么我收到空指针异常? (Netbeans 7.3,Java7)
答案 0 :(得分:2)
因为初始化时
Point[] map;
map = new Point[area];
它包含所有空引用。它创建一个Point
数组,默认情况下,数组中的每个元素都初始化为Point element=null
。因此,当您尝试map[0].x
时,它显然会抛出map[0]==null
{3}}为null
。请参阅NullPointerException,它告诉我们Java中的原始类型始终是零初始化的。引用初始化为null。因此,在引用数组中,每个元素的默认值将为Point[] map;
map = new Point[area];
map[i] = new Point();
map[i].x=0;
引用。
您需要更改以下行:
{{1}}
答案 1 :(得分: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;
...
答案 2 :(得分:1)
可能是因为array[iterator]==null
或array==null
而已。
为什么不调试?
答案 3 :(得分:1)
您收到NullPointerException,因为:
您已创建点对象数组并初始化点对象,您应首先使用new关键字创建点对象。但是在这里你没有为点对象创建内存,这是造成这种异常的原因。
答案 4 :(得分:0)
在对数组对象进行任何操作之前,不存在以下行:map[n] = new Point();
,因为它们在此时为空。