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
.
正如评论中指出的那样,您可能也意味着使用&&
而不是在每个条件或语句中两个条件匹配||
时运行代码.您也可以考虑使用而不是,以便用户输入的情况无关紧要.if
else if
equalsIgnoreCase()
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 次 |
最近记录: |