尝试在2D阵列中查找相邻单元格并获取IndexOutOfBounds

时间:2014-06-06 06:04:31

标签: java arrays multidimensional-array indexoutofboundsexception neighbours

我创建了一个2D数组(Cell[][]网格),每个单元格都包含一个名为ArrayList的{​​{1}};现在我试图找到它的邻居单元格,但我得到了neighborCells。你能帮忙吗?

IndexOutOfBoundsException

2 个答案:

答案 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] );
    }
}