2012-03-05 18 views
1

私はJavaでConways game of lifeを書こうとしていますが、それはうまくいきません。それは私が意味することは、まだ生命は動作するが、ウインカーと船はそうではないということです。Conwaysの問題Game of Life(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; 
    } 

答えて

4

state2=state1;はあなたの考えをしていません。

2つの変数が同じ配列を参照するだけです。

ので、あなたが実際にあなたがそれを解決するために、「最後のステップ」

として服用されているのと同じマトリックスを変更している、あなたはstate2state1をコピーする必要があります。

+0

これはまさに私が言うつもりでしたが、あなたは私にそれを打ち負かしました。 –

+0

「state2 = state1;」を変更しました。 "state2 = state1.clone();"に変更します。 "state1 = state2"の逆もありますが、問題は解決しません。 –

+1

'clone()'は浅いクローンです。同様の動作をします。 [このスレッド]を見てください(http://stackoverflow.com/questions/419858/how-to-deep-copy-an-irregular-2d-array)2dアレイを深くコピーする方法 – amit