2012-11-22 34 views
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,我只是一個數組賦值給另一個數組,但日誌怎麼來的有什麼不同?這有可能嗎?

+0

如果數組不同,日誌不會有什麼不同? – Intrepidd

回答

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

在第一項任務中,您並未創建數組的副本。而是一個對你的數組的引用的副本。

因此,您的virtualBoard引用與mBoard相同的陣列。因此,您使用任何referencearray所做的任何更改都會反映到其他reference

+0

感謝您的幫助! – user1701840

5

當我做virtualBoard等於mBoard,我只是一個數組賦值給另一個數組

不,你的mBoard值分配給virtualBoard。這些變量的值不是數組 - 它們是引用。因此在分配之後,mBoardvirtualBoard的值是對同一陣列的引用。然後在隨後的語句中更改該數組的內容。

這是一個有點像這樣的情況:

  • 我有一張紙,我家的地址
  • 我把那張紙的副本,並把它交給弗雷德
  • 弗雷德到達紙上的地址並將前門塗成綠色。
  • 當我回家時,我看到我的前門是綠色的。
+1

喜歡這個例子。大聲笑。 :)它很好:) –

+0

非常感謝!我搞砸了原始類型:( – user1701840