Kur*_*urt 0 java string android if-statement equals
我有一段代码,它根据所选的所需输入和输出更改参数的值.因此,在下面的示例中,我计算球体的体积,然后根据用户用于输入的单位和用户为输出选择的单位,相应地操纵数字.
我的问题是我的所有if语句都返回false,而不管选择什么,数字10(来自else)都会出现.我打印出inputPref和outputPref的值,它们看起来完全等于"mm"和"cubic cm"(例如),但仍然不会被if语句捕获.
任何明显的错误?如果有帮助,则从共享首选项加载两个变量"inputPref"和"outputPref"!
double volumeBase = 4 * piDouble * radius * radius * radius / 3;
double volume;
if(inputPref.equals("mm") || outputPref.equals("cubic cm"))
{
volume = volumeBase / 1000;
}
if(inputPref.equals("mm") || outputPref.equals("cubic metres"))
{
volume = volumeBase / 1000000000;
}
if(inputPref.equals("cm") || outputPref.equals("cubic mm"))
{
volume = volumeBase * 1000;
}
if(inputPref.equals("cm") || outputPref.equals("cubic metres"))
{
volume = volumeBase / 1000000;
}
if(inputPref.equals("metres") || outputPref.equals("cubic mm"))
{
volume = volumeBase * 1000000000;
}
if(inputPref.equals("metres") || outputPref.equals("cubic cm"))
{
volume = volumeBase * 1000000;
}
else
{
volume = 10;
}
Run Code Online (Sandbox Code Playgroud)
你的所有if陈述(第一个除外)都应该是else if陈述,所以它只选择你所有选择中的一个.
就目前而言,您的代码可能会在if早期评估一个语句,但它会被最后一个语句覆盖if-else,这几乎总是会返回10.
正如评论中指出的那样,您可能也意味着使用&&而不是在每个条件或语句中两个条件匹配||时运行代码.您也可以考虑使用而不是,以便用户输入的情况无关紧要.ifelse ifequalsIgnoreCase()equals()
它应该是...
double volumeBase = 4 * piDouble * radius * radius * radius / 3;
double volume;
if(inputPref.equalsIgnoreCase("mm") && outputPref.equalsIgnoreCase("cubic cm")){
volume = volumeBase / 1000;
}
else if(inputPref.equalsIgnoreCase("mm") && outputPref.equalsIgnoreCase("cubic metres")){
volume = volumeBase / 1000000000;
}
else if(inputPref.equalsIgnoreCase("cm") && outputPref.equalsIgnoreCase("cubic mm")){
volume = volumeBase * 1000;
}
else if(inputPref.equalsIgnoreCase("cm") && outputPref.equalsIgnoreCase("cubic metres")){
volume = volumeBase / 1000000;
}
else if(inputPref.equalsIgnoreCase("metres") && outputPref.equalsIgnoreCase("cubic mm")){
volume = volumeBase * 1000000000;
}
else if(inputPref.equalsIgnoreCase("metres") && outputPref.equalsIgnoreCase("cubic cm")){
volume = volumeBase * 1000000;
}
else {
volume = 10;
}
Run Code Online (Sandbox Code Playgroud)
如果它仍然无法正常工作,那么您正在阅读用户输入的代码可能存在问题.
你else在年底将音量设置为10如果inputPref不是metres或者cubic cm因为只有你最后 if是有关那个else.如果你在else之前的每一个之前放置if,它可能会比你期望的更多.你也有一些重复(你要检查mm多次).
例如(但也见下文):
double volume;
if(inputPref.equals("mm") || outputPref.equals("cubic cm"))
{
volume = volumeBase / 1000;
}
// v--- Note the `else`
else if(inputPref.equals("mm") || outputPref.equals("cubic metres"))
{
volume = volumeBase / 1000000000;
}
// ...
Run Code Online (Sandbox Code Playgroud)
此外,如Lews Therin所述,我怀疑你想要&&每一对,例如:
// here -------------------vv
if (inputPref.equals("mm") && outputPref.equals("cubic cm"))
Run Code Online (Sandbox Code Playgroud)
不
if (inputPref.equals("mm") || outputPref.equals("cubic cm"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |