我不知道为什么我在咨询时,如果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);
}
矩阵初始化了......
答案 0 :(得分:0)
在你对putCell()的调用中,你不想将cellPos作为第二个参数传递吗?
答案 1 :(得分:0)
这条线上的NPE有三种可能的解释:
if (matrix[pos.getX()][pos.getY()] == null) {
解释#1:matrix
是null
。
解释#2:pos
是null
。
解释#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) {
有效吗?