Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.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_Android_Arrays_Class_Nullpointerexception - Fatal编程技术网

Java 在类中访问数组时出现NullPointerException

Java 在类中访问数组时出现NullPointerException,java,android,arrays,class,nullpointerexception,Java,Android,Arrays,Class,Nullpointerexception,我是这个论坛和Java的新手。下面的代码可以编译,但当我尝试为变量输入值时,会得到NullPointerException。怎么了 class output_harm { public int[] timestamp; public int[] state; public output_harm(){ timestamp = new int[8]; state = new int[8]; } } output_harm[][]

我是这个论坛和Java的新手。下面的代码可以编译,但当我尝试为变量输入值时,会得到NullPointerException。怎么了

class output_harm
{
    public int[] timestamp;
    public int[] state;

    public output_harm(){
        timestamp = new int[8];
        state = new int[8];
    }
}

output_harm[][] outputs =  new output_harm[7][6];   

outputs[0][0].state[0] = 0; //java.lang.NullPointerException

执行
output\u harm[][]输出=新输出\u harm[7][6]
如果不初始化值,所有值都将设置为默认值,即
null

您需要添加:

outputs[0][0]=new output_harm();
然后你可以做:

outputs[0][0].state[0] = 0;
一致

outputs[0][0].state[0] = 0; //java.lang.NullPointerException
您的
输出[0][0]
为空,因此无法对空执行任何操作,因此这是NPE的根本原因

请确保在该行之前创建该对象,因此只需在以下内容之前粘贴:

outputs[0][0]=新的输出_harm()

在您的行中

output_harm[][] outputs =  new output_harm[7][6];   
您只初始化了数组,该数组到现在为止不包含任何值

在那之后你打电话来了

outputs[0][0].state[0] = 0;
这将导致出现
NullPointerException

数组初始化后,它包含默认值(对于您的数组类型[
output\u harm
],它将是
null
),并且您在
null
上调用了一个变量,该变量将抛出
NullPointerException

因此,首先您必须初始化您正在使用的数组索引,在您的情况下,您需要这样做

outputs[0][0] = new output_harm();

然后
输出[0][0]。状态[0]=0

只是一个指针,供您使用

  output_harm[][] outputs =  new output_harm[7][6];   
  outputs[0][0] =  new output_harm();
  outputs[0][0].state[0] =  0;
  outputs[0][0].state[1] =  1;

定义数组意味着现在
输出\u harm
非空
。但是

output_harm[][] outputs =  new output_harm[7][6];   

outputs[0][0].state[0] = 0; //java.lang.NullPointerException
正在访问第一个索引,
null
。所以这将是
nullPointerException

问题 输出伤害[]输出=新输出伤害[7][6]

这只是初始化一个数组。 当调用构造函数output_harm()时,只有它会进行初始化。 状态=新整数[8];在这里,状态在构造函数中初始化,并导致NullPointerException

解决方案: 首先,需要为每个输出初始化一个对象(如果需要初始化总数组)

output_harm[]outputs=新的output_harm[7][6];

对于(int i=0;iarray初始化并不意味着它包含任何值。在这种情况下,数组中的所有值都是
null
。在访问它之前先填充它。调用构造函数需要
new
关键字。现在就可以了。我需要在循环中创建每个对象,还是可以在一行中创建所有对象?您必须创建每个对象循环中的对象。
output_harm[][] outputs =  new output_harm[7][6];   
    for(int i=0;i<7;i++){
        for(int j=0;j<6;j++){
            outputs[i][j] = new output_harm();
        }
    }

    outputs[0][0].state[0] = 1;