我有一个开关和一个if语句,它们是等价的。他们应该采取一个字符串,如果是的话做一些事情,如果没有做另一件事。无论输入什么,if语句都不会执行任何操作,但switch语句会执行此操作。那是为什么?
这是if语句:
if (yes.equals("yes")){
System.out.println ("Enter your first number");
fnum = x.nextDouble();
System.out.println ("Enter your second number");
snum = x.nextDouble();
calculations(fnum, snum);
}
if (yes.equals("No")) {
System.out.println("okay, bye then!");
}
这是开关:
switch (yesno){
case "yes":
System.out.println ("Enter your first number");
fnum = x.nextDouble();
System.out.println ("Enter your second number");
snum = x.nextDouble();
calculations(fnum, snum);
break;
case "no":
System.out.println("k bye");
这不是重复,因为问题出在if语句中。我的交换机已被标记为重复。
答案 0 :(得分:2)
我有一个开关和一个if语句,它们是等价的。
实际上,它们不等同于:
if
版本正在检查"yes"
或"No"
。但检查"yes"
或"no"
的切换版本。由于检查在两种情况下都区分大小写,因此如果输入为"no"
...或"No"
,则会得到不同的结果。
这两个版本检查不同的变量;即yes
和yesno
。这可能会有所不同,具体取决于具体情况。
这些中的任何一个都可以解释您所看到的不同行为。
我认为是,并且肯定是平等的,但他们不是......?知道为什么吗?
嗯,显然名称不同,因此它们不能是相同的变量。
然而,它们是不同变量的事实并不一定意味着它们具有不同的值。 值决定了代码的行为。
当然,如果yesno
包含正确的"yes"
或"no"
值且yes
包含其他内容(例如""
),则会给出你正在观察的行为。 (显然这是一个假设的诊断。如果你想要一个更具体的答案,请告诉我们相关的代码。)