为什么我在这种特定情况下得到NullPointerException?

时间:2014-10-20 11:49:50

标签: java pointers exception matrix null

我不知道为什么我在咨询时,如果2个物体(细胞)的位置是空的,那么我会得到一个NPE。我通过if ((matrix[i][j]) == null)检查了这一点,并且我已经尝试if ((matrix[i][j]) != null)但我一次又一次地获得了NPE。我想知道如何在没有NPE的情况下检查它......

public class 2darrayofcells {

//rows and columns are final by requirement 
private final int rows;
private final int colums;
private Cell[][] matrix;
//the array needs an initial object
private Cell initialCell;

//Position class consist on 2 integers (x,y)

public 2darrayofcell(Position pos){
    //the arg pos is used to create the initial cell in the specified position of the array
    rows = 10;
    columns = 10;
    matrix = new Cell[rows][columns];
    initialCell = new Cell();
    matrix[pos.getX()][pos.getY()] = initialCell;

}

. . .

//Here i put a cell in a position of the array but before putting it 
//i need to know if it's empty. It will return true if the cell is added to 
//that position 
public boolean putCell(Cell cell, Position pos){

    //Null Pointer Exception
    if (matrix[pos.getX()][pos.getY()] == null) {

        //Do stuff
        return true;
    } 
  return false;
}

}

主要班级......

public static void main(String[] args) {


    Position pos = new Position(5,5);
    2darrayofcells test = new 2darrayofcells(pos);
    //test only has an object in 5,5
    //The position for the cell i want to insert (3,3) is empty
    Position cellPos = new Position(3,3);
    Cell testCell = new Cell();
    test.putCell(testCell, cellpos);


}

矩阵初始化了......

3 个答案:

答案 0 :(得分:0)

在你对putCell()的调用中,你不想将cellPos作为第二个参数传递吗?

答案 1 :(得分:0)

这条线上的NPE有三种可能的解释:

    if (matrix[pos.getX()][pos.getY()] == null) {

解释#1:matrixnull

解释#2:posnull

解释#3:matrix[pos.getX()]null


这些解释中的哪一个是正确的,无法完成。基本上,代码片段是不一致的(即它们不会编译),并且不一致使得弄清楚实际代码中发生的事情是不可行的。

即使忽略编译错误,代码的不同部分似乎暗示没有任何解释是正确的。然而,不可能是真的。如果恰好上面的线路抛出NPE,那么除了上面的三个之外没有其他可能的解释。无。

答案 2 :(得分:0)

我不知道Cell的样子,但你可能会尝试在null为默认值的单元格上使用getter:

if (matrix[pos.getX()][pos.getY()] == null)
pos.getX() throws NullPointerException

尝试:

if (matrix[0][0] == null) {

有效吗?