条件语句在Android App中产生不需要的操作

时间:2015-05-09 21:21:43

标签: java android if-statement conditional

我有以下代码供用户在四个选项中选择获胜者。变量p1,p2,p3和p4在此处使用之前通过比较方法确定(值始终在-3和3之间,3是赢家)。我遇到的问题是,有时,只有WINNING评估才会返回TIE的祝酒词。我在toast消息中包含变量,只是为了确保传递正确的值。所有值都是正确的。所以我不知所措。任何人都可以给我任何想法,为什么会发生这种情况?似乎只有当一名球员评价为3而另一名球员评价为-3时才会发生这种情况。所以我人为地'将所有变量膨胀3,这样相同的情况就会返回6和3.但问题仍然存在。我唯一能想到的是它可能是缓冲或缓存问题。但是每次传递都会通过onClick操作将所有变量重新初始化为0。请帮忙。谢谢。

    public void EvaluatePlayer1(View view) {
    if(p1>=p2 && p1>=p3 && p1>=p4){
        if(p1 == p2 || p1 == p3 || p1 == p4){
            Toast.makeText(getApplicationContext(), p1 + " It's a tie.",
                    Toast.LENGTH_SHORT).show();

        }else{
            Toast.makeText(getApplicationContext(), p1 + " You chose the winner!",
                    Toast.LENGTH_SHORT).show();

        }
    }else{

        Toast.makeText(getApplicationContext(), p1 + "You chose a loser!",
                Toast.LENGTH_SHORT).show();

    } }

2 个答案:

答案 0 :(得分:0)

变化:

if(p1 == p2 || p1 == p3 || p1 == p4){
            Toast.makeText(getApplicationContext(), p1 + " It's a tie.",
                    Toast.LENGTH_SHORT).show();

        }else{
            Toast.makeText(getApplicationContext(), p1 + " You chose the winner!",
                    Toast.LENGTH_SHORT).show();

        }

if(p1 > p2 && p1 > p3 && p1 > p4){
            Toast.makeText(getApplicationContext(), p1 + " You chose the winner!",
                    Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(getApplicationContext(), p1 + " It's a tie.",
                    Toast.LENGTH_SHORT).show();    
        }

答案 1 :(得分:0)

您允许的情况是您的平局值不是实际的赢家(请参阅我的评论)

if(p1>=p2 && p1>=p3 && p1>=p4) {  // can have 2 values >= p1
    if(p1 == p2 || p1 == p3 || p1 == p4) // FIXME: what if we tie with second place?

我认为您可能需要稍微简化一下这种比较,并在逻辑上进一步细分。像这样的东西

if(p1>p2 && p1>p3 && p1>p4)
    // p1 beat all other scores = winner
else if(p2>p1 || p3>p1 || p4>p1)
    // at least one other score beats p1 = loser
else
    if (p1 == max(p2, p3, p4))  // where max returns the highest other value
        // we equal the max of the other scores = tie for 1st place
    else
        // how did we get here?