Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 条件语句在Android应用程序中生成不需要的操作_Java_Android_If Statement_Conditional - Fatal编程技术网

Java 条件语句在Android应用程序中生成不需要的操作

Java 条件语句在Android应用程序中生成不需要的操作,java,android,if-statement,conditional,Java,Android,If Statement,Conditional,我有以下代码供用户在四个选项中选择赢家。变量p1、p2、p3和p4在这里使用之前通过比较方法确定。值始终在-3和3之间,3是赢家。我遇到的问题是,有时,而且只有有时,一次成功的评估会以平局的形式回敬祝酒辞。我在toast消息中包含了变量,只是为了确保传递的值正确。所有值都是正确的。所以我不知所措。有人能告诉我为什么会发生这种情况吗?这似乎只发生在一名球员的得分为3,另一名球员的得分为-3的情况下。所以我“人为地”将所有变量膨胀了3,同样的场景会返回6和3。但问题依然存在。我唯一能想到的可能是缓冲

我有以下代码供用户在四个选项中选择赢家。变量p1、p2、p3和p4在这里使用之前通过比较方法确定。值始终在-3和3之间,3是赢家。我遇到的问题是,有时,而且只有有时,一次成功的评估会以平局的形式回敬祝酒辞。我在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();

    } }
更改:

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) {  // 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? 

谢谢你的回复。我走了一点不同的路,因为我仍然不知道冲突在哪里。如果值为2、1或0,则会出现平局,这就是为什么第一个条件为>=,第二个条件为| |,因为所有玩家都可以在所有情况下使用值为0的平局。但当p1>大于所有其他值时,它的值为3,并且不能绑定。换句话说,如果p1的值超过所有其他值,则p1的值只能为3。不过,我确实明白,对于一个彻底的赢家,只使用>all会更好。再次感谢。@Oscar很高兴你找到了解决办法。仅供参考,这样您就可以在这里看到冲突发生的用例'p1=2''p2=2''p3=3''p4=-1'p2和p3满足您的条件,然后您在测试赢或输之前测试平局,发现与p2的平局,从而返回平局而不是winmeh,此处的注释格式不好,希望你能得到这个想法,如果有,请告诉我。就这么多。。。事实证明,通过这种方式,平局被视为胜利。无论如何,谢谢你。我发现了一种使用稍微不同的代码的方法。我只是说,如果p1=3,它就赢了,并保留了评估平局的原始条件,他们做得很好。我完全改变了我的答案。这应该是可行的,因为如果p1已经等于或大于所有其他值,并且现在使用大于所有值进行检查,那么它不可能是平局,唯一的其他选项是它被正确猜测。是的。这很有效。我不喜欢硬编码的价值,因为如果我添加球员,这将是不一样的。谢谢这是有道理的,它不会抛出那个奇怪的结果。哈哈,我没有名气,所以我甚至不能胜过你。。。
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?