操作数++有时不会在我的函数中增加

时间:2019-02-21 02:22:35

标签: while-loop nested-loops conways-game-of-life operands

    int generation = 0;

    System.out.println("\nGeneration " + generation + ":");

    for(int i = 0; i < rowcol; i++) {
        if(i > 0) {
            System.out.println();
        }
        for(int j = 0; j < rowcol; j++) {
            System.out.print(arr[i][j] + " ");
        }
    }

    boolean run = true;
    int copy[][] = arr;
    while(run) {

        int alive = 0;

        for(int i = 0; i < rowcol; i++) {
            for(int j = 0; j < rowcol; j++) {
                alive = 0;
                //top left
                if(i-1 > -1 && j-1 > -1) {
                    if(arr[i-1][j-1] == 1) {
                        ++alive;
                    }
                }
                //top
                if(i-1 > -1) {
                    if(arr[i-1][j] == 1) {
                        ++alive;
                    }
                }
                //top right wtf
                if(i-1 > -1 && j+1 < rowcol) {
                    if(arr[i-1][j+1] == 1) {
                        ++alive;
                    }
                }
                //left
                if(j-1 > -1) {
                    if(arr[i][j-1] == 1) {
                        ++alive;
                    }
                }
                //right
                if(j+1 < rowcol) {
                    if(arr[i][j+1] == 1) {
                        ++alive;
                    }
                }
                // down left
                if(i+1 < rowcol && j-1 > -1) {
                    if(arr[i+1][j-1] == 1) {
                        ++alive;
                    }
                }
                //down
                if(i+1 < rowcol) {
                    if(arr[i+1][j] == 1) {
                        ++alive;
                    }
                }
                //down right
                if(i+1 < rowcol && j+1 < rowcol) {
                    if(arr[i+1][j+1] == 1) {
                        ++alive;
                    }
                }


                if(arr[i][j] == 1) {
                    if(alive < 2) {
                        copy[i][j] = 0;
                    } else if(alive > 3) {
                        copy[i][j] = 0;
                    }
                } else if(arr[i][j] == 0 && alive == 3) {
                        copy[i][j] = 1;
                    }



            }
        }

        arr = copy;

        generation++;

        System.out.println("\nGeneration " + generation + ":");

        for(int i = 0; i < rowcol; i++) {
            if(i > 0) {
                System.out.println();
            }
            for(int j = 0; j < rowcol; j++) {
                System.out.print(arr[i][j] + " ");
            }
        }
    }

}

}

这是我的代码,基本上我有一个家庭作业项目,在网格中制作1和0的生活游戏,尽管用户输入很大,但是当我检查周围有多少个单元时遇到了问题活着

输入行数/列数: 3

0,1,1,1,0,0,0,1,0

第0代:

0 1 1

1 0 0

0 1 0

第1代:

0 1 0

1 1 1

1 0 0

这就是我控制台中的内容,但是在使用调试器时中间应该只有三个,中间居中位置的顶部和左侧和右侧,发现在检查中间的中间值时即使它通过了两个if语句,由于某种原因,它的确会将右上角的那个算作活着的,但我不知道为什么,所以活着的变量最终在中间行中间的那个位置变成三个将其更改为一个该代码可能很可怕,顺便说一句,我对这个东西还很陌生。我希望我提供了足够的详细信息,也只是询问您需要了解的其他信息,以帮助其获得极大的赞赏。

0 个答案:

没有答案