为Java中的二维数组分配值

时间:2018-11-21 03:50:10

标签: java arrays multidimensional-array

我需要为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;
    }
}

我可以知道如何将值初始化为二维数组吗?

5 个答案:

答案 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);