Java 为什么此代码会导致NullPointerException?
我用java.awt.Point编写了一段代码,该代码迭代了Point类型的一维对象数组。我试图用基本上Java 为什么此代码会导致NullPointerException?,java,arrays,nullpointerexception,point,Java,Arrays,Nullpointerexception,Point,我用java.awt.Point编写了一段代码,该代码迭代了Point类型的一维对象数组。我试图用基本上数组[iterator].x=iterator填充数组中每个点的x和y实例变量 代码 package onmap; import java.awt.Point; public class OnMap { public static void main(String[] args) { int width=50; int height=50;
数组[iterator].x=iterator
填充数组中每个点的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);
}
}
}
包onmap;
导入java.awt.Point;
地图上的公共类{
公共静态void main(字符串[]args){
整数宽度=50;
整数高度=50;
内部面积=宽度*高度;
int-xn;
int-yn;
int i=0;
int t=0;
点[]地图;
地图=新点[区域];
map[i].x=0;
System.out.print(“第一个x:+map[i].x”);
对于(int n=0;n可能是因为array[iterator]==null
或array==null
没别的了。
为什么不调试呢?可能是因为array[iterator]==null
或array==null
没别的了。
为什么不调试呢?因为初始化时
Point[] map;
map = new Point[area];
它包含所有空引用。它创建一个Point
数组,数组中的每个元素默认初始化为Point element=null
。因此,当您尝试map[0]时,x
显然会作为map[0]抛出==null
。请参阅,它告诉我们Java中的基元类型始终是零初始化的。引用被初始化为null。因此,在引用数组中,每个元素的默认值都将是null
引用
您需要更改您的行,如下所示:
Point[] map;
map = new Point[area];
map[i] = new Point();
map[i].x=0;
因为当你初始化的时候
Point[] map;
map = new Point[area];
它包含所有空引用。它创建一个Point
数组,数组中的每个元素默认初始化为Point element=null
。因此,当您尝试map[0]时,x
显然会作为map[0]抛出==null
。请参阅,它告诉我们Java中的基元类型始终是零初始化的。引用被初始化为null。因此,在引用数组中,每个元素的默认值都将是null
引用
您需要更改您的行,如下所示:
Point[] map;
map = new Point[area];
map[i] = new Point();
map[i].x=0;
只是因为数组包含空元素
你有:
...
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;
...
。。。
地图=新点[区域];
//初始化点阵列
对于(int k=0;k
仅仅因为数组包含空元素
你有:
...
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;
...
。。。
地图=新点[区域];
//初始化点阵列
对于(int k=0;k
缺少以下行:map[n]=new Point();
在对数组对象进行任何操作之前,因为此时它们为空。缺少以下行:map[n]=new Point();
在对数组对象进行任何操作之前,因为此时它们为空。您将获得NullPointerException,因为:
您已创建点对象数组,若要初始化点对象,应首先使用new关键字创建点对象。但此处您没有为点对象创建内存,而这正是此异常的原因。您将获得NullPointerException,因为:
您已经创建了点对象数组,要初始化点对象,您应该首先使用new关键字创建点对象。但这里您并不是在为点对象创建内存,这是导致此异常的原因。在问题中直接包含代码,并包含错误的完整堆栈跟踪。始终复制/粘贴错误&异常输出。在问题中直接包含代码,并包含错误的完整堆栈跟踪。始终复制/粘贴错误和异常输出。