两个看似相等的字符串不相等

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)

wat*_*ios 6

你的所有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)

如果它仍然无法正常工作,那么您正在阅读用户输入的代码可能存在问题.


T.J*_*der 6

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)

  • 请注意,String switch仅适用于Java7! (2认同)

Lew*_*rin 5

我想你想使用else if's并在你的条件下使用&& not ||