为什么抛出NullPointerException?

N_B*_*N_B -2 java arrays nullpointerexception

我有以下程序扫描二维矩阵并检查行和列中0的位置,并使整个行和列(行和列中的0存在),矩阵中的0.

public static int[][] makeMatZero(int[][] matrix){
    Boolean[] row = new Boolean[matrix.length];
    Boolean[] col = new Boolean[matrix[0].length];

    for(int i = 0;i< matrix.length;i++){
        for(int j = 0;j< matrix[0].length;j++){
            if(mat[i][j]==0){
                row[i]=true;
                col[j]=true;
            }
        }

    }

    for(int i = 0;i<row.length;i++){
        if(row[i]){
            removeRow(i,mat);
        }
    }

    for(int i = 0;i<col.length;i++){
        if(col[i]){
            removeCol(i,mat);
        }
    }
    return matrix;


}


public static void removeRow(int row, int[][] mat){
    for(int j  = 0;j<mat[0].length;j++){
        mat[row][j]=0;  

    }
}
public static void removeCol(int col, int[][] mat){
    for(int j  = 0;j<mat.length;j++){
        mat[j][col]=0;  

    }
}
Run Code Online (Sandbox Code Playgroud)

我在行if(row [i])中得到一个nullPointerException,如果我将它注释掉,我在if(col [i])中得到一个异常.我尝试调试并打印出i和row.length/col.length的值.i的值永远不会越过row.length/col.length,但我仍然得到nullPointerException.任何帮助让我知道错误是多么值得赞赏.

PS:我试图在Gayle Laakmann McDowell的"Cracking the coding Interview"一书中解决几个问题,上面提到的是章节数组和字符串中的一个问题.书中也给出了上述解决方案

Flo*_*cht 6

使用"小" boolean而不是Boolean类作为数组的类型,因此所有字段都将被初始化false而不是null(后者导致您的NullPointerException).

附加说明:Boolean是一个类,因此编译器对这样的行执行所谓的自动装箱:

Boolean b = null;
if (b) 
Run Code Online (Sandbox Code Playgroud)

Boolean b = null;
if (b.booleanValue())
Run Code Online (Sandbox Code Playgroud)

这是显而易见的呼吁.booleanValue()null是不是一个好主意.