0

こんにちは、Android で AI を使用してボード ゲームをやっています。

私には意味のない状況に遭遇しました。

コード:

    for(int y = 0; y < BOARD_SIZE ; y++)
    {
        Log.i(TAG, "before calling virtual mBoard:" + mBoard[y]);
    }

    virtualBoard = mBoard;  // int arrays
    virtualBoard[x] = nextMove(counter);

    for(int j = 0; j < BOARD_SIZE ; j++)
    {
        Log.i(TAG, "before calling AIValue mBoard:" + mBoard[j]);
    }

virtualBoard を mBoard と同じにすると、配列を別の配列に割り当てるだけですが、ログが異なるのはなぜですか? それはどのように可能ですか?

4

2 に答える 2

5

virtualBoard を mBoard に等しくするときは、配列を別の配列に割り当てるだけです

mBoardいいえ、 の値をに代入しますvirtualBoard。これらの変数の値は配列ではなく、参照です。したがって、その割り当ての後、 と の値はmBoard同じvirtualBoard配列への参照になります。次に、後続のステートメントでその配列の内容を変更します。

次のような状況です。

  • 自宅の住所が書かれた紙を持っています
  • 私はその紙のコピーを取ってフレッドに渡します
  • フレッドは一枚の紙に書かれた住所に行き、玄関のドアを緑に塗ります。
  • 家に帰ると、玄関のドアが緑色になっているのが分かります。
于 2012-11-22T19:49:16.480 に答える
1
    virtualBoard = mBoard;  // int arrays
    virtualBoard[x] = nextMove(counter);

最初の割り当てでは、配列のコピーを作成していません。むしろ、配列への参照のコピーです。

したがって、あなたvirtualBoardは と同じ配列を参照しますmBoardarrayそのため、 anyを使用して行った変更はreference、 other に反映されreferenceます。

于 2012-11-22T19:48:50.070 に答える