我需要给我的二维数组赋值。
我试着按照下面的方式进行编码,但我得到了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;
}
}
我可以知道如何将值初始化为二维数组吗?
当您试图访问类的成员,但该类的实例本身包含null
值时,会发生NullPointerException。
为了在您的情况下防止NullPointerException,您必须初始化数组值,因为对于Object类型的数组,位置中的默认值将是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);
您已经将2D数组初始化为1x1,这意味着数组中只有一个元素。尝试使用索引1将引发错误[索引从0开始]。
如果你想去那里,初始化为一个2x2数组。
你基本上是越界了,所以如果它是一个数组,你会得到一个ArrayIndexOutOfBoundsException。
初始化为:
MethodClass[][] methodset = new MethodClass[2][2];
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
。
MethodClass[][] methodSet = new MethodClass[1][2];
您正在声明一个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;
}
}
测试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);
}
}
在你的情况下,解决办法是,首先用类的构造函数初始化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);