2015-11-03 33 views
-1

您好我搜索了一個簡單的方法來檢查,陣列中的測試元素

如果在陣列中任意數量的元素達到6加起來七。我還沒有找到一個我的數組是這樣的,

private int[] diceRoll = new int[6]; 
+0

意味着它可以多達6個數字加入7? – sean

+0

這聽起來像他想知道什麼子集的diceRoll將加起來7.見下面我的答案。 – Riptyde4

回答

0

的問題是有點模糊,但是,這是我的問題的回答: 如果你試圖做的是採取兩個指數x和y在diceRoll [],看看他們加起來7,做最簡單的事情是

if(diceRoll[x] + diceRoll[y] ==7){ 
return true;} 

如果你想看看是否有任何其他項目的任何項目加起來7,使用雙換循環(這些很奇怪,但很有幫助)

for(int i = 0; i < diceRoll.length; i++){ 
    for(int j = 0; i < diceRoll.length; i++){ 
    if(diceRoll[i] + diceRoll[j] != 7){ 
    return false; 
    } 
    } 
} 

希望這有助於!

-katie

+0

是的,喜歡所有6個或任何數量的 –

+0

第二個'for'循環應該讀取for(int j = 0; j

+0

@ Josh.O這是假設有每次只有兩個骰子卷。如果有3或4呢?查看我的答案,找到可以組合任何數量卷的骰子卷的所有可能組合,這將增加到7 – Riptyde4

0

這聽起來像你需要做的是採取diceRoll陣列的每一個子集,看看哪些加起來7.這是它是如何做的事情。假設你知道1 = 1,並且假定數組中的每個元素具有數字0 0 0 0 0,如果選擇元素(例如元素5)​​,則子集以二進制形式表示將是0 0 0 0 1.如果選擇了元素2和3,則子集表示將爲0 0 1 1 0.如果採用二進制形式,請跟蹤其索引,並將其從右移到在每次數組計算索引& 1中,可以獲得該數組的哪些索引位於當前子集中(如果該索引的索引爲& 1計算結果爲1)。將它轉換爲一個叫做currSubset的較小的數組,你可以總結它並檢查它是否等於7.

外循環的終止來自5位二進制數的最大值,即11111 = 31 = 2^5-1,因此使用小於號。

int sum = 0; 
int index = 0; 
ArrayList<ArrayList<Integer>> subsetsThatAddTo7 = new ArrayList<ArrayList<Integer>>(); 
for(int subsetRep = 0b00001; i < Math.pow(2,5); i++){ 
    ArrayList<Integer> currSubset = new ArrayList<Integer> 
    for(index = 0; index < 5; index++){ 
     if(subsetRep & (1 << index)) 
      currSubset.add(diceRoll[5-index]); 
    } 
    int sum = 0; 
    for(int num : currSubset) 
     sum += num; 
    if(sum == 7) 
     subsetsThatAddTo7.add(currSubset); 
}