您好我搜索了一個簡單的方法來檢查,陣列中的測試元素
如果在陣列中任意數量的元素達到6加起來七。我還沒有找到一個我的數組是這樣的,
private int[] diceRoll = new int[6];
您好我搜索了一個簡單的方法來檢查,陣列中的測試元素
如果在陣列中任意數量的元素達到6加起來七。我還沒有找到一個我的數組是這樣的,
private int[] diceRoll = new int[6];
的問題是有點模糊,但是,這是我的問題的回答: 如果你試圖做的是採取兩個指數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
是的,喜歡所有6個或任何數量的 –
第二個'for'循環應該讀取for(int j = 0; j
@ Josh.O這是假設有每次只有兩個骰子卷。如果有3或4呢?查看我的答案,找到可以組合任何數量卷的骰子卷的所有可能組合,這將增加到7 – Riptyde4
這聽起來像你需要做的是採取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);
}
意味着它可以多達6個數字加入7? – sean
這聽起來像他想知道什麼子集的diceRoll將加起來7.見下面我的答案。 – Riptyde4