3 回答

TA貢獻1852條經驗 獲得超1個贊
int[][] winner = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}};
當有贏家時,這都是所有可能的情況。前 3 個是水平的,接下來的 3 個是垂直的,最后 2 個是對角的,其中的數字是這樣定義的,在前面的代碼中表示:
0 | 1 | 2
---+---+---
3 | 4 | 5
---+---+---
6 | 7 | 8
那么我們來分析一下核心代碼:
for (int[] columnWinner : winner) { // traverses all cases
if ( // if there is a case satisfied
// for a specified case for example {0, 1, 2}
playerChoices[columnWinner[0]] == playerChoices[columnWinner[1]] && // check if choice at 0 is the same as choice at 1
playerChoices[columnWinner[1]] == playerChoices[columnWinner[2]] && // check if choice at 1 is the same as choice at 2
// then choice at 0 1 2 are the same
playerChoices[columnWinner[0]] != Player.NO // and this "the same" is not "they are all empty"
) {
// then there is a winner

TA貢獻1803條經驗 獲得超6個贊
我假設您正在詢問 for each 循環:
for (int[] columnWinner : winner) {
該循環稱為 for each 循環,它創建一個變量并為循環中的每次迭代賦予一個值。
在這種情況下,循環為井字棋棋盤上每個可能的行、列和對角線創建一個名為 columnWinner 的長度為 3 的數組。
每次循環時,它都會檢查該人是否贏得了驗證 columnWinner 數組中的所有三個元素是否相同:
if (playerChoices[columnWinner[0]] == playerChoices[columnWinner[1]] && playerChoices[columnWinner[1]] == playerChoices[columnWinner[2]]
然后檢查以確保它們已填寫,而不是空的。
&& playerChoices[columnWinner[0]] != Player.NO) {

TA貢獻1820條經驗 獲得超9個贊
3 x 3 板由一維數組表示(相當奇怪)。所有獲勝位置都是手動確定的,并winner
以三倍的形式列在數組中,因為在井字游戲中占據一個獲勝位置需要 3 個標記。
您指示的循環依次檢查每個獲勝位置。
例如,考慮獲勝位置{1, 4, 7}
。if 語句檢查棋盤位置 1、4、7 的值是否相同,并且不等于表示沒有人在那里玩過的“NO”值。
實際winners
數據結構為(3 元素)數組的數組;因此 for 循環一次獲取每個 3 元素數組并使用它來驅動“if”語句。例如,when columnWinner
is {1, 4, 7}
thencolumnWinner[0]
是 4,因此playerChoices[columnWinner[0]]
正在查看playerChoices[4]
。
添加回答
舉報