java 尝试输出二维数组中的所有相邻元素,但仅输出数组的大小

djmepvbi  于 2023-02-21  发布在  Java
关注(0)|答案(1)|浏览(149)
public ArrayList<GridCell> getAdjacent() {
        ArrayList<GridCell> results = new ArrayList<GridCell>();
        
        for (int r = this.getRow()-1; r<= this.getRow()+1; r++ ) {
            for(int c = this.getColumn() -1 ; c<= this.getColumn() +1 ;c++) {
                if (r == this.getRow()  &&  c == this.getColumn()) {
                    
                }
                else if (r < 0 ||  r > grid.getHeight() - 1 || c < 0 || c > grid.getWidth() - 1) {
                    
                }
                else {
                    results.add(grid.get(r,c));
                }
            }
        }
        return results;
    }

我试着创建一个嵌套的for循环来遍历元素的相邻行和列,看看它们是否超出了元素的实际范围,它应该输出元素的位置,但只输出二维数组的大小,例如4x3。
this.getRows()和这个.getColumns()表示数组中要查找其相邻元素的元素的位置坐标。例如(3,1)是要查找相邻元素的元素,数组的大小为4行乘3列,当前的输出是一个数组列表,值为(4,3)但是我希望它是一个数组列表,值为(3,0)(3,2)(2,0)(2,1)(2,2)。

cbjzeqam

cbjzeqam1#

我们无法判断您的代码出了什么问题,因为我们无法看到所有这些支持函数,它们是否正确实现,以及您如何测试结果以查看它们是否正确。
不过,我会从重写getAdjacent()函数开始,使其更易于阅读和理解:

public ArrayList<GridCell> getAdjacent() {
    ArrayList<GridCell> results = new ArrayList<GridCell>();

    int curRow = this.getRow();
    int r1 = Math.Max(0, curRow-1);
    int r2 = Math.Min(grid.getHeight()-1, curRow+1);
  
    int curCol = this.getColumn();
    int c1 = Math.Max(0, curCol-1);
    int c2 = Math.Min(grid.getWidth()-1, curCol+1);
  
    for (int r = r1; r <= r2; r++) {
        for(int c = c1; c <= c2; c++) {
            if ( !(r == curRow && c == curCol) ) {
                results.add(grid.get(r,c));
            }
        }
    }
  
    return results;
}

如果getRow()getColumn()给予的坐标不在数组的边界内,它是否应该返回一个空的ArrayList?如果这些坐标刚好在边界外,而一些相邻的邻居在边界内呢?即使起始坐标在边界外,边界内的坐标是否仍然应该返回?
这个版本的好处是你现在可以检查curRowcurColr1r2c1c2,看看这些值是否是你所期望的,这将告诉你这些支持函数是否工作正常。

相关问题