条件语句在 Android 应用程序中产生不需要的操作
Conditional statement produces unwanted action in Android App
我有以下代码供用户在四个选项中选出一个获胜者。变量 p1、p2、p3 和 p4 在此处使用之前通过比较方法确定(值始终在 -3 和 3 之间,3 为赢家)。我遇到的问题是,有时,只有有时,一个获胜的评估 return 是平局的祝酒词。我已将变量包含在 toast 消息中,只是为了确保传递了正确的值。所有值都是正确的。所以我很茫然。谁能告诉我为什么会发生这种情况?这似乎只发生在一名球员评估为 3,另一名球员评估为 -3 时。所以我 'artificially' 将所有变量都膨胀了 3,所以同样的情况会 return 一个 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){
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();
}
您允许平局的价值不是真正的赢家(见我的评论)
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?
我有以下代码供用户在四个选项中选出一个获胜者。变量 p1、p2、p3 和 p4 在此处使用之前通过比较方法确定(值始终在 -3 和 3 之间,3 为赢家)。我遇到的问题是,有时,只有有时,一个获胜的评估 return 是平局的祝酒词。我已将变量包含在 toast 消息中,只是为了确保传递了正确的值。所有值都是正确的。所以我很茫然。谁能告诉我为什么会发生这种情况?这似乎只发生在一名球员评估为 3,另一名球员评估为 -3 时。所以我 'artificially' 将所有变量都膨胀了 3,所以同样的情况会 return 一个 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){
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();
}
您允许平局的价值不是真正的赢家(见我的评论)
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?