Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么此代码会导致NullPointerException?_Java_Arrays_Nullpointerexception_Point - Fatal编程技术网

Java 为什么此代码会导致NullPointerException?

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;

我用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;
        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关键字创建点对象。但这里您并不是在为点对象创建内存,这是导致此异常的原因。

在问题中直接包含代码,并包含错误的完整堆栈跟踪。始终复制/粘贴错误&异常输出。在问题中直接包含代码,并包含错误的完整堆栈跟踪。始终复制/粘贴错误和异常输出。