通过更大的数组移动Java数组

时间:2014-03-17 00:26:06

标签: java arrays matrix

因此,对于我的班级,我的任务是扫描一个大的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);
}

3 个答案:

答案 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

循环是什么?