Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调试生活游戏,Java_Java_Eclipse_Debugging_Logic_Conways Game Of Life - Fatal编程技术网

调试生活游戏,Java

调试生活游戏,Java,java,eclipse,debugging,logic,conways-game-of-life,Java,Eclipse,Debugging,Logic,Conways Game Of Life,我正试图复制这个模型,但我有一个bug。细胞是按照设计出生的,但不会死亡。这让我很困惑,因为我杀死细胞的策略和生下细胞的策略是一样的。这是控制台输出的一段,“x”代表活细胞,“-”代表死细胞 --------- --------- --------- ---xx---- ----x---- ----x---- ----xx--- --------- --------- --------- --------- --------- ---xx---- ----xx--- ---xx---- ---

我正试图复制这个模型,但我有一个bug。细胞是按照设计出生的,但不会死亡。这让我很困惑,因为我杀死细胞的策略和生下细胞的策略是一样的。这是控制台输出的一段,“x”代表活细胞,“-”代表死细胞

---------
---------
---------
---xx----
----x----
----x----
----xx---
---------
---------

---------
---------
---------
---xx----
----xx---
---xx----
----xx---
---------
---------

---------
---------
---------
---xxx---
----xx---
---xx----
---xxx---
---------
---------
以及相关的代码:

public class Life {

final static int WIDTH = 9, HEIGHT = 9;

void start(){

    // scanning input file

    char[][][] board =  new char[WIDTH][HEIGHT][maxAllowedGenerations];
    board = getInitialBoard(initialBoardString, maxAllowedGenerations, board);

    for (int generation = 1; generation < maxAllowedGenerations; generation++){
        for (int y = 0; y < HEIGHT; y++)
            for (int x = 0; x < WIDTH; x++){

                int numberOfNeighbours = getNumberOfNeighbours(x, y, generation - 1 , board);

                if (board[x][y][generation - 1] == '-' && numberOfNeighbours == 3)
                    board[x][y][generation] = 'x';

                else if (board[x][y][generation - 1] == 'x' && numberOfNeighbours < 2)
                    board[x][y][generation] = '-';

                else board[x][y][generation] = board[x][y][generation - 1];


                if (board[x][y][generation] == 'x')
                    ui.place(x, y, LifeUserInterface.ALIVE);
                else
                    ui.place(x, y, LifeUserInterface.DEAD);

                out.print(board[x][y][generation]);
            }
            out.println();
        }
    }
    out.println("Max number of generations reached");
    System.exit(0);             
}
公共阶级生活{
最终静态整型宽度=9,高度=9;
void start(){
//扫描输入文件
char[][]board=新字符[WIDTH][HEIGHT][maxallowedgegenerations];
board=getInitialBoard(initialBoardString,MaxAllowGenerations,board);
对于(int generation=1;generation
我同意@elyashiv-如果你将
char[][][]]board
更改为
SomeEnum[][]]board
,使用
SomeEnum
定义值
LIVE_CELL
DEAD_CELL
,这将使事情更具可读性

此外,不存在空字符“”。空的
字符串
只是长度为零(即没有字符)的
字符串,但“”没有任何意义。您可以使用
null
,但是您必须离开原语
char
声明,而使用
Character
,因为原语不能
null

也就是说,使用枚举表示数据要好得多。如果需要,您甚至可以将枚举设置为如下所示,以便表示X和空字符,如下所示:

public enum SomeEnum {
    LIVE_CELL("X"),
    DEAD_CELL("");

    public final displayString;

    SomeEnum(String displayString) {
        this.displayString = displayString;
    }    
}

然后,对于您的显示,您可以在代码中引用
SomeEnum.LIVE\u CELL.displayString
,发现两个bug!其中一个是你无法发现的,因为我没有发布包含它的代码:我是[x][y][g]的一个手机。我曾考虑将[x][y][g-1]作为邻居,但那当然是我!我不是自己的邻居

另一个bug实际上有点尴尬。我遗漏了第2条规则…>

我也意识到我应该发布生活游戏的规则,而不是假设你们都知道它们或者你们会费心去研究它们。现在当然有点晚了,不过如果你有兴趣的话,我还是会把它们发出去的。另外,我真的为所有对自组织感兴趣的人推荐了这个方法

规则:

  • 有<2个活邻居的活细胞死亡,就好像是因为孤独
  • 有超过3个活邻居的活细胞死亡,就好像是由于人口过剩
  • 有2 | | 3个活邻居的活细胞存活到下一代
  • 死亡的细胞与3个活的邻居一起复活,就像通过繁殖一样

  • 谢谢大家的意见

    你应该使用-这将增加代码的可读性。你所说的“细胞死亡不会被存储到下一代”是什么意思?你能把范围缩小到你认为问题所在的代码部分吗?问题会根据要求进行修改。请不要破坏你自己的问题。如果要删除问题,请将其删除,否则请将其保持在可读/可理解的状态。我同意使用enum将使我的代码更具可读性,并且在任何意义上都优于enum。但是如果我理解正确,无论我使用char还是enum,程序的功能都无关紧要。对吗?你的意思是问题是我用了空字符。我没有,它们是空间。是['',不是[''。抱歉,我看错了你原来的问题。你能公布你的具体错误吗?我想我们大多数人都知道。。。我的意思是,谁没有把生命的游戏编码好?谁能抗拒?:)