获取二维网格相邻GridCell异常:仅返回数组尺寸而非相邻元素
问题诊断与修复
你的代码逻辑本身没问题,但返回结果显示网格尺寸而非单元格坐标,核心原因大概率是**GridCell类的toString()方法实现错误**——它没有输出自身的行、列坐标,反而输出了整个网格的宽高(比如grid.getWidth()和grid.getHeight())。
比如你看到的[(4,3)],4是网格的行数(grid.getHeight()),3是列数(grid.getWidth()),说明打印结果时,GridCell的toString方法返回的是网格尺寸,而非自身坐标。
修复步骤
修正
GridCell的toString()方法:
确保它返回自身的行和列属性,而非网格的属性。正确实现示例:@Override public String toString() { return "(" + this.getRow() + ", " + this.getColumn() + ")"; }验证
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
相关产品推荐
相关产品推荐

