Android比较布尔值

时间:2014-04-12 02:18:20

标签: java android boolean

我正在创建一个简单的应用程序,您必须切换按钮/布尔值,以尝试猜测正确的组合。我想知道最简单的方法来比较切换布线器和#34;右边#34;组合。例如,如果用户具有:

  

布尔1:真实   布尔值2:假
  布尔值3:true

但正确的组合是:

  

布尔1:真实   boolean 2:true
  布尔值3:true

我希望用户看到一条消息,说明你有3个正确。我有

public void go(View view){
    if (bool1 == true && boo12 == true && bool3 == true) {
        // do this
    } else {
        // display the correct amount of booleans the user has correct.
    }
}

4 个答案:

答案 0 :(得分:2)

  1. 为正确的组合创建BitSet(设置对应于“true”的位,清除对应于“false”的位。)

  2. 如果要检查用户的输入,请从按下的按钮创建BitSet(设置为“true”,清除“false”)。

  3. 可以使用correctValue.equals(usersAttempt)检查正确性。

  4. 可以通过usersAttempt.xor(correctValue)获取计数,然后usersAttempt.cardinality()将返回不正确的值的数量。

  5. 这需要极少量的编码。以你的例子:

    // Correct: [true,true,true]
    BitSet correct = new BitSet(3);
    correct.set(0); // <= true
    correct.set(1); // <= true
    correct.set(2); // <= true
    
    // User's attempt (buttonN.isChecked() is just placeholder, drop in whatever
    // code you actually use to get the state of your buttons):
    BitSet attempt = new BitSet(3); 
    attempt.set(0, button0.isChecked()); // <= true in your example
    attempt.set(1, button1.isChecked()); // <= false in your example
    attempt.set(2, button2.isChecked()); // <= true in your example
    
    // Check answer (produces false in your example):
    boolean matchIsPerfect = attempt.equals(correct);
    
    // Get the count (produces 1 in your example): 
    attempt.xor(correct);
    int incorrectCount = attempt.cardinality();
    
    // To get the correct count just subtract 'incorrectCount' from total.
    
    // Another way to check if attempt is correct is 'if (incorrectCount == 0)'.
    
    // Note that the remaining bits set in 'attempt' after the above xor()
    // will correspond to the individual inputs that weren't correct.
    

    这将允许您支持任何大小,代码清晰,您不需要自己做任何逻辑。请注意,您可以简化按钮 - &gt;用户的尝试设置,如果您有一个按钮数组或可以访问给定索引的用户输入。

答案 1 :(得分:1)

如果条件并非总是如此,那么说bool3需要是假的,你可以使用这样的东西。否则,正如提到的其他答案一样,数组可能效果最好。

int correctCount = 0;

if (bool1) correctCount++;
if (bool2) correctCount++;
if (!bool3) correctCount++;

if (correctCount == 3) {
    // do this
} else {
    Toast.makeText(context, String.valueOf(correctCount) + " out of 3 correct", Toast.LENGTH_LONG).show();
}

答案 2 :(得分:1)

假设您的“正确”组合将同时包含truefalse值,则以下方法将返回匹配数,如果数组长度不匹配,则返回-1

private int getMatches(boolean[] toggleValues, boolean[] matchPattern)
{
    if(toggleValues.length != matchPattern.length)
        return -1;

    int matches = 0;

    for (int j = 0; j < toggleValues.length; j++)
    {
        if(toggleValues[j] == matchPattern[j])
        {
            matches++;
        }
    }
    return matches;
}

例如,如果您有3个ToggleButtontb1tb2tb3,则以下内容将返回2:

tb1.setChecked(true);
tb2.setChecked(false);
tb3.setChecked(false);

final boolean[] matchPattern = {true, false, true};
final boolean[] toggleValues = {tb1.isChecked(), tb2.isChecked(), tb3.isChecked()};

int matches = getMatches(toggleValues, matchPattern);

此方法可让您轻松更改匹配模式而无需更改代码,例如将存储的值从文件或matchPattern读入SharedPreferences数组。

答案 3 :(得分:0)

你可以这样做,因为布尔值的数量可以大于3.你可能想要使用for循环(简单方法)并在值的末尾迭代它并将计数数返回到值k 。这里k-> true布尔值的数量,b是包含布尔值数组的数组。

public void go(View view){

      boolean b[]={bool1,bool2,bool3,bool4,bool5,bool6,bool7,bool8,bool9,bool10};

     int k=0;
    for(int i=0;i<b.length;i++)
    {
        if(b[i]==true)
        {

            k++;
        }


    }

   if(k==b.length)
       {
           do task
       }
    else 
       {

            Toast.makeText(getApplicationContext(), k+ "out of "+b.length+ "correct",Toast.LENGTH_LONG).show(); 
        }



}