我有以下代码供用户在四个选项中选择获胜者。变量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();
} }
答案 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?