我创建了一个2D数组(Cell[][]
网格),每个单元格都包含一个名为ArrayList
的{{1}};现在我试图找到它的邻居单元格,但我得到了neighborCells
。你能帮忙吗?
IndexOutOfBoundsException
答案 0 :(得分:3)
我在您的示例中找到了 [1] 三个错误,并提出了以下更正建议:
1)更改结束位置的计算 - 导致您的例外 - 进入此
int endPositionX = (i + 1 >= grid.length) ? i : i + 1;
int endPositionY = (j + 1 >= grid.length) ? j : j + 1;
2)你需要为每个单元格设置一个arraylist,所以将结果的初始创建更改为两行并将其更改为
grid[i][j].neighborCells = new ArrayList();
3)一个小区不是它自己的邻居
if (row!=i || col!=j) {
grid[i][j].neighborCells.add(grid[row][col]);
}
[1] 我将它移植到C ++,很抱歉如果将其移植回来会有任何错误;)
答案 1 :(得分:1)
以下是我用于测试Cell类的内容,因为你没有提供你的
public class Cell {
public Cell( ) {
list = new ArrayList<Cell>( );
}
public void add( Cell cell ) {
list.add( cell );
}
private List<Cell> list;
}
这是一个可以找到相邻单元格的示例。如果只有4个相邻的单元格(上方,下方,左侧和右侧),我不知道为什么还有两个嵌套的for循环。对我来说,摆脱它们似乎更简单
Cell[][] grid = new Cell[5][5];
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
cell[i][j] = new Cell( );
}
}
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
// Cell above
if (i > 0) cell[i][j].add( cell[i - 1][j] );
// Cell to the left
if (j > 0) cell[i][j].add( cell[i][j - 1] );
// Cell below
if (i < grid.length - 1) cell[i][j].add( cell[i + 1][j] );
// Cell to the right
if (j < grid[i].length - 1) cell[i][j].add( cell[i][j + 1] );
}
}