Java 生命游戏算法/if-else语句的结构

Java 生命游戏算法/if-else语句的结构,java,if-statement,runtime-error,conways-game-of-life,Java,If Statement,Runtime Error,Conways Game Of Life,我目前正在介绍Java类编程,遇到了一两个问题 首先,我目前的程序是“康威的生活游戏”,除了检查邻近细胞的算法外,我的一切都正常工作 我在Stackoverflow上查看了7到8篇不同的帖子,在其他网站上也查看了几篇,到目前为止,我还没有找到任何人采用我的方法 现在我所需要的是有人检查我的代码,看看它是否应该工作,如果不,为什么不?目前,我收到一个运行时错误,上面说: “ArrayIndexOutOfBoundsException:5 at Life.checkold(Life.java:151

我目前正在介绍Java类编程,遇到了一两个问题

首先,我目前的程序是“康威的生活游戏”,除了检查邻近细胞的算法外,我的一切都正常工作

我在Stackoverflow上查看了7到8篇不同的帖子,在其他网站上也查看了几篇,到目前为止,我还没有找到任何人采用我的方法

现在我所需要的是有人检查我的代码,看看它是否应该工作,如果不,为什么不?目前,我收到一个运行时错误,上面说:

“ArrayIndexOutOfBoundsException:5 at Life.checkold(Life.java:151)”

我已经尽我所能在代码中标记了这个位置

我对这些方法的输入是一个大小为5×5的数组

首先,感谢你至少阅读了这篇文章。第二,如果我需要包括任何其他内容,请留下评论或回复(此处新增抱歉)

下一栋大楼:

public static boolean[][] buildnext(boolean[][] lastgen)
{
    boolean[][] nextgen = new boolean[lastgen.length][lastgen[0].length];

    for(int r = 0; r < lastgen[0].length; r++)
    {
        for(int c = 0; c < lastgen.length; c++)
        {
            nextgen[c][r] = checkold(lastgen, c, r);
        }
    }
    return nextgen;

}
publicstaticboolean[]buildnext(boolean[]lastgen)
{
boolean[]nextgen=new boolean[lastgen.length][lastgen[0].length];
对于(int r=0;r
我的检查方法:

public static boolean checkold(boolean[][] lastgen, int col, int row)
    {
        int acount = 0;
        boolean alive = lastgen[col][row];

        if(col == 0 && row == 0) //Top Left Corner
        {       
            if(lastgen[col][row + 1] == true) acount++; //Below
            if(lastgen[col + 1][row] == true) acount++; //Right
            if(lastgen[col + 1][row + 1] == true) acount++; //Below Right
        }

        else if(col == lastgen.length && row == 0)//Top Right Corner
        {
            if(lastgen[col][row + 1] == true) acount++; //Below
            if(lastgen[col - 1][row] == true) acount++; //Left
            if(lastgen[col - 1][row + 1] == true) acount++; //Below Left
        }
        else if(col == 0 && row == lastgen[0].length)//Bottom Left Corner
        {
            if(lastgen[col][row - 1] == true) acount++; //Above
            if(lastgen[col + 1][row] == true) acount++; //Right
            if(lastgen[col + 1][row - 1] == true) acount++; //Above Right

        }
        else if(col == lastgen.length && row == lastgen[0].length) //Bottom Right Corner
        {
            if(lastgen[col][row - 1] == true) acount++; //Above
            if(lastgen[col - 1][row] == true) acount++; //Left
            if(lastgen[col - 1][row - 1] == true) acount++; //Above Left
        }
        else if(col == 0 && row > 0 && row < lastgen[0].length) //Left Col
        {
            if(lastgen[col][row - 1] == true) acount++; //Above
                            if(lastgen[col][row + 1] == true) acount++; //Below  (This is the code that the runtime error is about)
            if(lastgen[col + 1][row] == true) acount++; //Right
            if(lastgen[col + 1][row - 1] == true) acount++; //Above Right
            if(lastgen[col + 1][row + 1] == true) acount++; //Below Right

        }
        else if(col == lastgen.length && row > 0 && row < lastgen[0].length) //Right Col
        {
            if(lastgen[col - 1][row] == true) acount++; //Left
            if(lastgen[col][row - 1] == true) acount++; //Above
            if(lastgen[col][row + 1] == true) acount++; //Below
            if(lastgen[col - 1][row - 1] == true) acount++; //Above Left
            if(lastgen[col - 1][row + 1] == true) acount++; //Below Left
        }
        else if(col < 0 && row == 0) //Top Row
        {
            if(lastgen[col][row + 1] == true) acount++; //Below
            if(lastgen[col - 1][row] == true) acount++; //Left
            if(lastgen[col + 1][row] == true) acount++; //Right
            if(lastgen[col - 1][row + 1] == true) acount++; //Below Left
            if(lastgen[col + 1][row + 1] == true) acount++; //Below Right
        }
        else if(col < 0 && row == lastgen[0].length) //Bottom Row
        {
            if(lastgen[col][row - 1] == true) acount++; //Above
            if(lastgen[col - 1][row] == true) acount++; //Left
            if(lastgen[col + 1][row] == true) acount++; //Right
            if(lastgen[col - 1][row - 1] == true) acount++; //Above Left
            if(lastgen[col + 1][row - 1] == true) acount++; //Above Right
        }
        else if(col < 0 && row < 0) //Middle Cells
        { 
            if(lastgen[col][row + 1] == true) acount++; //Below
            if(lastgen[col][row - 1] == true) acount++; //Above
            if(lastgen[col - 1][row] == true) acount++; //Left
            if(lastgen[col + 1][row] == true) acount++; //Right

            if(lastgen[col - 1][row - 1] == true) acount++; //Above Left
            if(lastgen[col + 1][row - 1] == true) acount++; //Above Right
            if(lastgen[col - 1][row + 1] == true) acount++; //Below Left
            if(lastgen[col + 1][row + 1] == true) acount++; //Below Right
        }

        if(acount == 3 && alive == false) alive = true;
        if(acount == 1) alive = false;
        if(acount == 3 && alive == true) alive = false;

        return alive;
    }
public静态布尔checkold(boolean[]lastgen,int col,int row)
{
int acount=0;
布尔活动=lastgen[col][row];
if(col==0&&row==0)//左上角
{       
如果(lastgen[col][row+1]==true)下面有一个帐户+++;//则
如果(lastgen[col+1][row]==true)帐户++;//正确
如果(lastgen[col+1][row+1]==true)一个帐户++;//位于右下方
}
else if(col==lastgen.length&&row==0)//右上角
{
如果(lastgen[col][row+1]==true)下面有一个帐户+++;//则
if(lastgen[col-1][row]==true)acount++;//左
如果(lastgen[col-1][row+1]==true)一个帐户+++;//位于左下方
}
else if(col==0&&row==lastgen[0].length)//左下角
{
如果(lastgen[col][row-1]==true)账户++;//在上面
如果(lastgen[col+1][row]==true)帐户++;//正确
如果(lastgen[col+1][row-1]==true)一个帐户+++;//位于右上方
}
else if(col==lastgen.length&&row==lastgen[0].length)//右下角
{
如果(lastgen[col][row-1]==true)账户++;//在上面
if(lastgen[col-1][row]==true)acount++;//左
如果(lastgen[col-1][row-1]==true)一个帐户+;//位于左上方
}
else if(col==0&&row>0&&row0&&row
您的异常非常明显,您试图访问一个超出范围的数组索引

else if(col == 0 && row > 0 && row < lastgen[0].length) //Left Col
        {
            if(lastgen[col][row - 1] == true) acount++; //Above
                            if(lastgen[col][row + 1] == true) acount++; //Below  (This is the code that the runtime error is about)

说LASTGEN数组是2x3数组,行=2,否则如果部分是真的,并考虑是否也是真的,现在在这里

if(lastgen[col][row + 1] == true) 
您正在尝试访问
3
索引,
请记住:数组索引以零开始。如果数组长度为3,则数组索引将为0,1,2<代码>2将成为最后一个索引

这些条件正确吗

      col < 0
col<0

在我看来,您应该评估“col>0”错误,因为同一块中有两行

 1. if(lastgen[col][row + 1] == true) acount++;
 2. if(lastgen[col + 1][row + 1] == true) acount++;
假设lastgen元素大小为4,并且您正试图使用
[row+1]
 1. if(lastgen[col][row + 1] == true) acount++;
 2. if(lastgen[col + 1][row + 1] == true) acount++;