gpt4 book ai didi

java - 检查网格,抛出越界异常

转载 作者:行者123 更新时间:2023-11-29 10:15:46 25 4
gpt4 key购买 nike

目前,我正在尝试检查网格单元格周围所有单元格中的数据。上、左、下、右和所有对角线。我怎样才能使用异常抛出,这样我就不必单独对边和角进行编码?

这是我目前拥有的。 isIsAlive() 只是检查单元格是否处于“Activity ”状态。一个单元格的邻居包括它周围的所有 Activity 单元格。

    public void calcNeighbors() throws ArrayIndexOutOfBoundsException{

int x =0;

int y =0;
int neighbors = 0;



while(x < 9){
while(y < 9){

if(generation[x+1][y+1].isIsAlive()){
neighbors++;

}
if(generation[x+1][y].isIsAlive()){
neighbors++;
}
if(generation[x+1][y-1].isIsAlive()){
neighbors++;
}
if(generation[x][y-1].isIsAlive()){
neighbors++;
}
if(generation[x-1][y-1].isIsAlive()){
neighbors++;
}
if(generation[x-1][y].isIsAlive()){
neighbors++;
}
if(generation[x-1][y+1].isIsAlive()){
neighbors++;
}
if(generation[x][y+1].isIsAlive()){
neighbors++;
}
y++;
}
x++;
neighbors = 0;
}
}

最佳答案

您的 if block 列表丑陋(直言不讳)且危险。而是使用嵌套的 for 循环,但计算 for 循环的上限和下限时考虑到边缘。

for (int x = 0; x < MAX_X; x++) {
for (int y = 0; y < MAX_Y; y++) {

int minRow = Math.max(0, x - 1);
int maxRow = Math.min(MAX_X - 1, x + 1);
int minCol = Math.max(0, y - 1);
int maxCol = Math.min(MAX_Y - 1, y + 1);

for (int row = minRow; row <= maxRow; row++) {
for (int col = minCol; col <= maxCol; col++) {
if (row != x || col != y) {
if(generation[row][col].isIsAlive()){
neighbors[x, y]++;
}
}
}
}
}
}

关于java - 检查网格,抛出越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18454793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com