【问题标题】:Problems with Conways Game of Life (in java)康威生命游戏的问题(在 java 中)
【发布时间】:2012-03-05 11:33:53
【问题描述】:

我正在尝试用 Java 编写康威人生游戏,但它没有按应有的方式工作。我的意思是,静物可以工作,但眼罩和船只不行。

这是我的算法的代码,播种由单独的鼠标侦听器处理(按预期工作)。

    int[][] state1 = new int[80][80];
    int[][] state2 = new int[80][80];
    public void logic(){
        state2=state1;
        for(int i=0;i<80;i++){
            for(int j=0;j<80;j++){
                int sum=state1[(i-1+80)%80][j]+state1[(i-1+80)%80][(j-1+80)%80]+state1[i][(j-1+80)%80]+state1[(i+1)%80][(j-1+80)%80]+state1[(i+1)%80][j]+state1[(i+1)%80][(j+1)%80]+state1[i][(j+1)%80]+state1[(i-1+80)%80][(j+1)%80];

                if(sum!=2 && sum!=3){
                    state2[i][j]=0;
                }
                else if(sum==3){
                    state2[i][j]=1;
                }
            }
        }
        state1=state2;
    }

【问题讨论】:

    标签: java


    【解决方案1】:

    state2=state1; 没有做你认为的事情。

    它只会让两个变量引用同一个数组。

    所以,您实际上是在更改作为“最后一步”采用的相同矩阵

    要解决它,您需要将state1 复制到state2。

    【讨论】:

    • 这正是我要说的,但你打败了我。
    • 我改变了“state2=state1;”进入“state2=state1.clone();” “state1=state2”反之亦然,但问题仍然存在。
    • clone() 是浅克隆,会导致类似的行为。看看this thread如何深拷贝二维数组
    • 谢谢,它现在工作得很好。奇怪的是,java 没有内置的深度复制二维数组的方法,但是嗯。
    • @BabarShariff:不客气。如果您觉得有帮助,请不要忘记accept an answer。
    猜你喜欢
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多