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 时,我只是将一个数组分配给另一个数组

不,您将 的值分配mBoardvirtualBoard。这些变量的值不是数组——它们是引用。所以在赋值之后,mBoard和的值virtualBoard是对同一个数组的引用。然后在后续语句中更改该数组的内容。

有点像这种情况:

  • 我有一张纸,上面写着我的家庭住址
  • 我把那张纸复印了一份给弗雷德
  • 弗雷德走到纸上的地址,把前门漆成绿色。
  • 当我回到家时,我看到我的前门是绿色的。
于 2012-11-22T19:49:16.480 回答
1
    virtualBoard = mBoard;  // int arrays
    virtualBoard[x] = nextMove(counter);

在第一个作业中,您没有创建数组的副本。而是对您的数组的引用的副本。

因此,您virtualBoard引用的数组与mBoard. 因此,您对arrayusing any所做的任何更改reference都将反映在 otherreference上。

于 2012-11-22T19:48:50.070 回答