2011-11-11 48 views
0

如果我有如果陣列

int win[][] ={{1,2,3},{4,5,6},{7,8,9},{1,4,7},{2,5,8},{3,6,9},{1,5,9},{3,5,7}}; 

我可以把條件這樣的條件?

if(((win[0][0]) && (win[0][1]) && (win[0][2]))|| 

      ((win[1][0]) && (win[1][1]) && (win[1][2]))|| 

      ((win[2][0]) && (win[2][1]) && (win[2][2]))|| 

      ((win[3][0]) && (win[3][1]) && (win[3][2]))|| 

      ((win[4][0]) && (win[4][1]) && (win[4][2]))|| 

      ((win[5][0]) && (win[5][1]) && (win[5][2]))|| 

      ((win[6][0]) && (win[6][1]) && (win[6][2]))|| 

      ((win[7][0]) && (win[7][1]) && (win[7][2]))|| 

      ((win[8][0]) && (win[8][1]) && win[8][2]))) 
+3

我不明白爲什麼不......不過你爲什麼會做這樣的說法?你有沒有考慮過循環每一組3? – James

+1

你爲什麼不先試試自己? – Pratik

回答

2

你的陣列是8×,意味着最後一個元素將是win[7][2]。所以調用win[8][0]將拋出一個ArrayIndexOutOfBounds異常。如果你糾正這個錯誤,你的代碼將會工作。希望這可以幫助。

-1

如果你的目標是完全混淆讀者 - 你可以

+0

還沒有足夠的聲望尚未發表評論 – andrershov

+1

然後刪除答案,否則得到否定的投票 – Pratik

+0

請你解釋你爲什麼投票拒絕這個答案。你認爲寫這樣的條件可以嗎? – andrershov

1

對於這更清晰的版本,爲什麼不嘗試:

for(int i = 0; i < 8; i++) { 
    if(win[i][0] && win[i][1] && win[i][2]) { 
     doStuff(); 
     break; 
    } 
} 
+0

沒關係你的解決方案,但我不明白它是如何工作的...例如,如果我= 4,將會驗證的條件是什麼? – eu127

+0

你剛剛回答了你自己的問題。當'i = 4'時,if語句中的'i'將被替換爲'4'。由於你的原始條件是任何一組三個都是真的(因爲你使用|| OR運算符)。 Mine添加了break,因爲在其中一個條件成立之後(例如,如果win [2] [0] && win [2] [1] && win [2] [2]評估爲true),沒有理由繼續評估其餘的集合。 – kcoppock

+0

謝謝!你的解決方案運作良好再次感謝! – eu127