【发布时间】:2021-01-31 17:40:10
【问题描述】:
我遇到了这个问题,我找不到解决方案。有一个二维数组,其中只有零和一个(数组的大小并不重要,我使用的是 10x10)。零表示死,1 表示活着。我将它加倍循环以检查元素sorroundings,当它与其他“单元格”一起使用时,代码可以正常工作。但是当它在角落或数组的另一边之一时,它会抛出 ArrayIndexOutOfBoundsException。 我的问题是如何在不处理所有可能情况的情况下为此编写代码?
public class Main {
public static void main(String[] args) {
int[][] grid = {
{1,1,1,0,1,0,1,0,0,0},
{1,1,1,0,1,1,0,0,1,0},
{1,1,0,0,1,0,0,1,0,0},
{0,1,0,1,0,0,1,0,0,0},
{0,0,1,0,0,1,0,0,1,0},
{0,0,0,0,0,0,0,0,1,0},
{0,0,0,1,0,0,0,1,0,0},
{0,1,0,0,0,0,0,0,0,0},
{0,0,0,1,0,0,1,0,0,0},
{0,1,0,0,0,0,0,0,1,0},
};
Simulation sm = new Simulation(grid);
sm.printOutOriginalGrid();
sm.gameOfLife();
}
}
public class Simulation {
private int[][] grid;
public Simulation(int[][] grid){
this.grid = grid;
}
public void printOutOriginalGrid() {
System.out.println("Original grid");
for (int i = 0; i < this.grid.length; i++) {
for (int j = 0; j < this.grid[i].length; j++) {
System.out.print(this.grid[i][j] + " ");
}
System.out.println(" ");
}
}
public int[][] gameOfLife() {
for (int i = 0; i < this.grid.length; i++) {
for (int j = 0; j < this.grid.length; j++) {
int currentCell = this.grid[i][j];
if(currentCell == 1){
int currentCellNeighbours = numberOfAliveNeighbours(i,j);
}
}
}
return new int[12][12];
}
private int numberOfAliveNeighbours(int i, int j){
int numberOfAliveNeighbours = 0;
numberOfAliveNeighbours += this.grid[i-1][j-1];
numberOfAliveNeighbours += this.grid[i][j-1];
numberOfAliveNeighbours += this.grid[i+1][j-1];
numberOfAliveNeighbours += this.grid[i-1][j];
numberOfAliveNeighbours += this.grid[i+1][j];
numberOfAliveNeighbours += this.grid[i-1][j+1];
numberOfAliveNeighbours += this.grid[i][j+1];
numberOfAliveNeighbours += this.grid[i+1][j+1];
return numberOfAliveNeighbours;
}
}
【问题讨论】:
-
返回新的 int[12][12];只是编译器的随机返回
-
这不是一个有效的位置
int[12][12];也在方法numberOfAliveNeighbours()中传递二维数组大小来检查你没有移出数组索引。
标签: java arrays for-loop double conways-game-of-life