我有一段代码可以根据所选的输入和输出更改参数的值。因此,在下面的示例中,我计算球体的体积,然后根据用户用于输入的单位和用户为输出选择的单位,相应地操纵数字。
我的问题是我的所有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;
}
答案 0 :(得分:6)
您的所有if
语句(第一个除外)都应为else if
语句,因此它只会从您的所有选项中选择1个。
按照目前的情况,你的代码可能在早期评估if
语句,但它会被最后的if-else
覆盖,这几乎总是会返回{{1} }}
正如评论中所指出的那样,您可能也意味着使用10
而不是&&
,以便在两个条件匹配时运行代码每个||
或if
声明。您也可以考虑使用else if
而不是equalsIgnoreCase()
,以便用户输入的情况无关紧要。
应该是......
equals()
如果它仍然无效,那么您正在阅读用户输入的代码可能存在问题。
答案 1 :(得分:6)
如果else
不是10
或inputPref
,那么最后metres
会将音量设置为cubic cm
,因为只有最后 if
与else
有关。如果您将else
放在之前if
的每个之前,它可能会比您预期的更多。您还有一些重复项(您不止一次检查mm
)。
E.g。 (但也见下文):
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;
}
// ...
另外,作为noted by Lews Therin,我怀疑你想要每对&&
,例如:
// here -------------------vv
if (inputPref.equals("mm") && outputPref.equals("cubic cm"))
不
if (inputPref.equals("mm") || outputPref.equals("cubic cm"))
答案 2 :(得分:5)
我认为你想使用else if
并在你的条件下使用&&不是||
答案 3 :(得分:1)
可能是您的上一次 , / strong>,注意:其他只适用于最后一个if。 使用else-if代替所有if的
if(cond){
}
else if(cond){
}
else{
}
答案 4 :(得分:1)
我会扔掉字符串,并使用枚举代替这种代码......
public enum LengthUnit {
M,
CM,
MM
}
public enum VolumeUnit {
M3,
CM3,
MM3
}
您甚至可以将转换率放在类似单位中,例如TimeUnit
优点:
缺点: