我有以下程序扫描二维矩阵并检查行和列中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我在行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"一书中解决几个问题,上面提到的是章节数组和字符串中的一个问题.书中也给出了上述解决方案
1> Florian Albr..:使用"小"
boolean
而不是Boolean
类作为数组的类型,因此所有字段都将被初始化false
而不是null
(后者导致您的NullPointerException
).附加说明:
Boolean
是一个类,因此编译器对这样的行执行所谓的自动装箱:Boolean b = null; if (b)变
Boolean b = null; if (b.booleanValue())这是显而易见的呼吁
.booleanValue()
上null
是不是一个好主意.