我需要为2维数组分配一个值。
我尝试按以下方式进行编码,但出现NullPointer异常错误。
MethodClass[][] methodSet = new MethodClass[1][1];
methodSet[0][0].setmethodName(1);
methodSet[0][1].setmethodStatus(1);
MethodClass
文件:
public class MethodClass {
private int methodName;
private int methodStatus;
public MethodClass() {
methodName = 0;
methodStatus = 0;
}
public int getmethodName() {
return methodName;
}
public int getmethodStatus() {
return methodStatus;
}
public void setmethodName(int i) {
this.methodName = i;
}
public void setmethodStatus(int status) {
this.methodStatus = status;
}
}
我可以知道如何将值初始化为二维数组吗?
答案 0 :(得分:1)
当您尝试访问类的成员但该类的实例本身包含null
值时,会发生NullPointerException。
要防止您的情况发生NullPointerException,必须初始化数组值,因为对于对象类型数组,位置的默认值为NULL
。
最好做:
MethodClass[][] methodArray = new MethodClass[1][1]; //You can put any dimentions to this array, below for loop will initialize all the positions.
for (int i = 0; i < methodArray.length; i++){
for (int j = 0; j < methodArray[i].length; j++) {
methodArray[i][j] = new MethodClass();
}
}
然后您可以按以下方式访问方法:
methodArray[0][0].setmethodName(1);
methodArray[0][0].setmethodStatus(1);
答案 1 :(得分:0)
\n
仅初始化您的数组。要初始化数组中的元素,您需要执行以下代码。
MethodClass[][] methodSet = new MethodClass[1][1]
第二,对于MethodClass[][] methodSet = new MethodClass[1][1];
methodSet[0][0]=new MethodClass();
methodSet[0][0].setmethodName(1);
,您需要更改大小,否则它将抛出methodset[0][1]
。
ArrayIndexOutOfBoundsException
答案 2 :(得分:0)
您已将2D数组初始化为1x1,这意味着数组中将只有一个元素。尝试使用索引1会引发错误[索引从0开始]。
如果要去那里,请将其初始化为2x2数组。
您基本上超出了范围,因此,如果它是一个数组,则会得到ArrayIndexOutOfBoundsException。
像这样初始化它:
withXXX
答案 3 :(得分:0)
您要声明一个1 * 1的矩阵,其大小为1。只有索引为(0,0)。 (0,1)无效。
尝试使用以下代码,
MethodClass.java
public class MethodClass {
private int methodName;
private int methodStatus;
public MethodClass() {
methodName = 0;
methodStatus = 0;
}
public MethodClass(int methodName, int methodStatus) {
this.methodName = methodName;
this.methodStatus = methodStatus;
}
public int getMethodName() {
return methodName;
}
public void setMethodName(int methodName) {
this.methodName = methodName;
}
public int getMethodStatus() {
return methodStatus;
}
public void setMethodStatus(int methodStatus) {
this.methodStatus = methodStatus;
}
}
Test.Java
public class Test {
public static void main(String a[]){
MethodClass[][] methodSet = new MethodClass[2][2];
methodSet[0][0] = new MethodClass(0, 0);
methodSet[0][1] = new MethodClass(0, 1);
methodSet[1][0] = new MethodClass(1, 0);
methodSet[1][1] = new MethodClass(1, 1);
System.out.println(methodSet);
}
}
答案 4 :(得分:0)
当您尝试访问类的方法/函数但该类的实例本身包含空值时,会显示空指针异常。
例如null.setmethodName(1)
将引发异常。
您的解决方法是, 首先,使用该类的构造函数初始化MethodClass 2D数组,以便2D数组的每个单元格都包含MethodClass实例。
MethodClass[][] methodSet = new MethodClass[1][1];
//since the array size of each cell is fixed to 1 in
//your case. So you can loop for row and column from 0 to less then 1 for 0
//indexed cells. otherwise you could also use i<methodSet.length for row and
//j<methodSet[i].length for column
for(int i=0;i<1;i++){
for(int j=0;j<1;j++){
methodSet[i][j]=new MethodClass(); // your MethodClass constructor
}
}
然后您可以按以下方式访问方法/功能:
methodSet[0][0].setmethodName(1); // since the size of each cell of the 2D array is one in your case and index starts from zero so only cell [0][0] is valid in this case
methodSet[0][0].setmethodStatus(1);