You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取二维网格相邻GridCell异常:仅返回数组尺寸而非相邻元素

问题诊断与修复

你的代码逻辑本身没问题,但返回结果显示网格尺寸而非单元格坐标,核心原因大概率是**GridCell类的toString()方法实现错误**——它没有输出自身的行、列坐标,反而输出了整个网格的宽高(比如grid.getWidth()和grid.getHeight())。

比如你看到的[(4,3)],4是网格的行数(grid.getHeight()),3是列数(grid.getWidth()),说明打印结果时,GridCell的toString方法返回的是网格尺寸,而非自身坐标。

修复步骤

  1. 修正GridCell的toString()方法:
    确保它返回自身的行和列属性,而非网格的属性。正确实现示例:

    @Override
    public String toString() {
        return "(" + this.getRow() + ", " + this.getColumn() + ")";
    }
    
  2. 验证grid.get(r,c)方法正确性:
    确认该方法确实返回对应(r,c)坐标的GridCell实例,而非绑定了网格尺寸的错误对象。检查grid类的get方法逻辑,确保按传入的行、列参数返回对应单元格。

代码优化建议

你代码里的空if/else if块可以合并简化,减少冗余:

public ArrayList<GridCell> getAdjacent() {
    ArrayList<GridCell> results = new ArrayList<>();
    int currentRow = this.getRow();
    int currentCol = this.getColumn();
    int maxRow = grid.getHeight() - 1;
    int maxCol = grid.getWidth() - 1;

    for (int r = currentRow - 1; r <= currentRow + 1; r++) {
        for (int c = currentCol - 1; c <= currentCol + 1; c++) {
            // 跳过自身和越界单元格
            if ((r == currentRow && c == currentCol) 
                || r < 0 || r > maxRow 
                || c < 0 || c > maxCol) {
                continue;
            }
            results.add(grid.get(r, c));
        }
    }
    return results;
}

内容的提问来源于stack exchange,提问作者Jojo Fan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:22:07