因此,对于我的班级,我的任务是扫描一个大的15x15矩阵,以获得水平和垂直4x4矩阵的所有可能组合。这是我提出的,但它返回一个空指针异常。关于如何解决这个问题的任何建议?
public double compareMatrices(int[][] num,int[][] mat){
int o=0;
double score=0;
for(int n=0;n+4<mat.length;n++){
int[][] rows=new int[4][];
for(int m=0;m+4<15;m++){
for(;o<4;o++){
rows[o]=Arrays.copyOfRange(mat[o], m, m+4);
}
for(int p=0;p<rows.length;p++){
for(int q=0;q < rows.length;q++){
if((rows[p][q]==1)&&(num[p][q]==1)){
score+=1;
}else if((num[p][q]==1)&&(rows[p][q]==0)){
score-=.25;
}else if((num[p][q]==0)&&(rows[p][q]==0)){
score+=.25;
}
}
}
}
}
return(score);
}
答案 0 :(得分:1)
在您的内部for循环中,您将q
递增到rows.length
。除非您完全确定只有方形矩阵,否则应在该循环中使用rows[0].length
。这可能导致ArrayOutOfBounds异常。但正如我在你的代码中看到的那样,它的工作方式很好。
在你的一个for循环结束时,这行o++;
是否有原因?因为上面你有这个:
for(;o<4;o++)
rows[o]=Arrays.copyOfRange(mat[o], m, m+4);
最终这种情况会导致nullpointerexception,因为你不再填充数组rows
。当o大于4时,for循环将不会执行。并且您的代码中的o大于4。快速修复将该变量的初始化放入for循环
for(int o ;o<4;o++)
答案 1 :(得分:0)
当数组索引保持NULL数据时,可能会导致Null指针异常,当您在NULL数据上迭代数组并与某个值进行比较时,它将引发错误。
要解决此问题,请先检查数组索引是否为NULL,如果是,请跳过它或忽略它
if (array[i][j] != null){
// then do your codes
}
或
if (array[i][j] == null){
continue; // skip this null array
}
答案 2 :(得分:0)
零看起来像o
而不是0
循环是什么?