测试数组中的元素

时间:2015-11-03 01:22:13

标签: java arrays

您好我已经搜索了一种简单的检查方法,

如果数组中最多6个元素的数量加起来为7。我还没找到一个我的阵列就是这个,

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

2 个答案:

答案 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);
}