2017-10-13 9 views
1

2次元配列を使用してConwayのゲームをしようとしています。このメソッドは、2次元配列上のすべての位置を見て、その近傍をチェックし、その位置を囲んでいる近隣の人数を数えます(0は空、1は占有されています)。次に、ロジックを実行し、その位置が死んでいるか生きているかを判断します。私が抱えている問題は、tempMatrixの値が間違っているということです。私は具体的に最初のポジション[0] [0]をチェックしていて、0から1に変わり、理由は分かりません。ご協力いただきありがとうございます!2d配列の読み込みに関する問題 - Java

public static int[][] Evolve(int[][] _array){ 
    inputMatrix = _array; 
    outputMatrix = inputMatrix; 
    int [][] tempMatrix = inputMatrix; 
    System.out.println("Output Matrix:"); 
    for (int x = 0; x < size; x++){ 
     for (int y = 0; y < size; y++){ 
      int neighbor_count = 0; 
      ArrayList<int[]> neighbors = getNeighbors(x,y); 
      for(int[] neighbor: neighbors){ 
       int tempX = neighbor[0]; 
       int tempY = neighbor[1]; 
       int temp = tempMatrix[tempX][tempY]; 
       if(temp == 1){ 
        neighbor_count++; 
       } 
      } 
      if(tempMatrix[x][y] == 1){ 
       if(neighbor_count == 1 || neighbor_count > 3) { 
        outputMatrix[x][y] = 0; 
       } 
       else{ 
        outputMatrix[x][y] = 1; 
       } 
      }else if(neighbor_count == 3){ 
       outputMatrix[x][y] = 1; 
      }else{ 
       outputMatrix[x][y] = 0; 
      } 
      System.out.printf("%2d ",outputMatrix[x][y]); 
     } 
     System.out.println(); 
    } 
    return outputMatrix; 
} 
+2

あなたの 'outputMatrix'と' tempMatrix'は単に 'inputMatrix'を指していて、まったく同じものです。現在、配列は1つしかありませんが、その配列にアクセスするために使用できる3つの変数名があります。あなたの意図は実際にコピーを作ることだったと思いますが、それは自動的には起こりません。 –

+0

も参照してください:[配列Javaのコピーを作成する](https://stackoverflow.com/questions/5785745/make-copy-of-array-java) –

+0

配列の唯一の値が0と1の場合は、 'boolean [] [] '代わりに? – jsheeran

答えて

0

あなたinputMatrixoutputMatrixtempMatrixは同じ2Dアレイに言及しています。次のコード

if(tempMatrix[x][y] == 1){ 
      if(neighbor_count == 1 || neighbor_count > 3) { 
       outputMatrix[x][y] = 0; 
      } 
      else{ 
       outputMatrix[x][y] = 1; 
      } 
     }else if(neighbor_count == 3){ 
      outputMatrix[x][y] = 1; 
     }else{ 
      outputMatrix[x][y] = 0; 
     } 

tempMatrixも変化の値によってoutputMatrixを修正するため 、。 したがって、3つの行列のすべてに対して新しい2D配列を作成し、その値をコピーしてみてください。

int inputMatrix[][]=new int[dimension][dimension]; 

は今inputMatrix_array行列の値をコピーします。

+0

私は2つの新しい配列を作成し、それぞれの値に_arrayの値をコピーします。それは必要ではないので、私はまた、入力行列を取り除いたが、私はまだ同じ問題を抱えている。 – DiscoJesus127

関連する問題