Java 在2d数组中查找邻居(不包括对角线)

Java 在2d数组中查找邻居(不包括对角线),java,arrays,ccl,Java,Arrays,Ccl,在另一篇文章中,我发现这种方法可以在2d阵列中找到当前像素的邻居。该解决方案将对角像素视为相邻像素。我需要一个只直接给出N,S,E,W的解决方案。我怎样才能在代码中实现它呢? 我提到的帖子可以在这里找到: 欢迎提供任何意见/帮助 for(int x=0; x<matrix.length; x++) { for(int y=0; y<matrix[0].length; y++) { //Iterate through length of column (y)

在另一篇文章中,我发现这种方法可以在2d阵列中找到当前像素的邻居。该解决方案将对角像素视为相邻像素。我需要一个只直接给出N,S,E,W的解决方案。我怎样才能在代码中实现它呢? 我提到的帖子可以在这里找到: 欢迎提供任何意见/帮助

for(int x=0; x<matrix.length; x++) {
            for(int y=0; y<matrix[0].length; y++) { //Iterate through length of column (y)
                if(matrix[x][y] != 0) { 

                    ArrayList<Integer> neighbors = new ArrayList<Integer>(); //Connected elements with the current element's value
                    //Checks pixels N,S,E,W of the current pixel
                    for(int nx=-1; nx<=1; nx++) { 
                        for(int ny=-1; ny<=1; ny++) {

                            if(x+nx<0 || y+ny<0 || x+nx>labels.length-1 || y+ny>labels[0].length-1) { 
                                continue;
                            }
                            else {
                                if (x + nx == 0 && x + ny == 0) {
                                  continue;
                                }
                                if (labels[x + nx][y + ny] != 0) {
                                    neighbors.add(labels[x + nx][y + ny]);
                                }
                            }
                        }
                    }


for(intx=0;x我认为下面的代码对于您的用例已经足够了

        int n = matrix.length;
        int m = matrix[0].length;
        ArrayList[][] neighbors = new ArrayList[n][m];

        for(int x=0; x<matrix.length; x++) {
            for(int y=0; y<matrix[0].length; y++) { //Iterate through length of column (y)
                neighbors[x][y]= new ArrayList<Integer>();
                if(matrix[x][y] != 0) {

                    //Checks pixels N,S,E,W of the current pixel
                    if (x-1 > 0 && labels[x-1][y]!=0)
                    {
                        neighbors[x][y].add(labels[x-1][y]);
                    }
                    if (x+1 < labels.length && labels[x+1][y]!=0)
                    {

                        //add neighbours
                        neighbors[x][y].add(labels[x-1][y]);
                    }
                    if (y-1 > 0 && labels[x][y-1]!=0 )
                    {
                        //
                        neighbors[x][y].add(labels[x-1][y]);
                    }
                    if (y+1 < labels[0].length && labels[x][y+1]!=0){
                        neighbors[x][y].add(labels[x-1][y]);
                    }

                }
            }
        }
int n=matrix.length;
int m=矩阵[0]。长度;
ArrayList[][]邻居=新的ArrayList[n][m];
对于(int x=0;x 0&&labels[x][y-1]!=0)
{
//
邻居[x][y]。添加(标签[x-1][y]);
}
如果(y+1<标签[0]。长度和标签[x][y+1]!=0){
邻居[x][y]。添加(标签[x-1][y]);
}
}
}
}