您好我已经搜索了一种简单的检查方法,
如果数组中最多6个元素的数量加起来为7。我还没找到一个我的阵列就是这个,
private int[] diceRoll = new int[6];
答案 0 :(得分:0)
问题有点模糊,但是,这是我尝试回答的问题: 如果你要做的是在diceRoll []中取两个索引x和y,看看它们是否加起来是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
答案 1 :(得分:0)
听起来你需要做的是获取diceRoll数组的每个子集,看看哪些加起来为7.这就是它的完成方式。
假设你知道1&amp; 1 = 1,那1&amp; 0 = 0,想象数组中每个元素的数字都在0 0 0 0 0,如果选择了元素,比如元素5,二进制形式的子集表示将是0 0 0 0 1.如果元素2和3是选中,子集表示将为0 0 1 1 0.如果你采用二进制表示,跟踪其索引,并在每次数组计算索引&amp; 1中从右向左移动它,你可以得到哪个索引数组在当前子集中(如果索引&amp; 1计算导致该索引为1)。将其转换为一个名为currSubset的较小数组,您可以将其总结并检查它是否等于7.
外部for循环的终止来自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);
}