您好我的书中有关于if-else-if语句的代码是代码
{
int mesec = 4; // April
String season;
if(mesec==12 || mesec==1 || mesec==2)
season= "winter";
else if (mesec==3 || mesec==4 || mesec==5)
season= "spring";
else if (mesec==6 || mesec==7 || mesec==8)
season= "summer";
else if (mesec ==9 || mesec ==10 || mesec ==11)
season= "autumn";
else
season = "wrong month";
System.out.println("When it is April, it is "+season);
}
当我使用if-else-if语句时,此代码可以正常工作,但是当我尝试仅使用if-else
时public static void main(String args[])
{
int mesec = 4; // April
String season;
if(mesec==12 || mesec==1 || mesec==2)
season= "winter";
if (mesec==3 || mesec==4 || mesec==5)
season= "spring";
if (mesec==6 || mesec==7 || mesec==8)
season= "summer";
if (mesec ==9 || mesec ==10 || mesec ==11)
season= "autumn";
else
season = "wrong month";
System.out.println("When it is April, it is "+season);
}
我总是错误的输出是“当它是4月,这是错误的月份”
当我们使用if-else-if变量季节保存哪个季节时, 但是当我们只使用if-else时它只保存来自else语句的季节?任何人都可以解释我的问题是什么?
答案 0 :(得分:5)
第二个程序中的else
语句仅适用于最后一个if
:
if (mesec ==9 || mesec ==10 || mesec ==11)
因此,如果月份是9,10或11,它将只按预期的方式工作。
答案 1 :(得分:3)
谁能解释我的问题是什么?
说:
if (mesec ==9 || mesec ==10 || mesec ==11)
season= "autumn";
else
season = "wrong month";
您覆盖season
,即如果mesec
之前4
为season
,则spring
为false
,但上述情况的评估结果为season
因此将wrong month
设置为{{1}}。
答案 2 :(得分:2)
你的回答是错误的,因为在最后一种情况下
if (mesec ==9 || mesec ==10 || mesec ==11)
season= "autumn"; // this will evaluate false as mesec=4
else
season = "wrong month"; // So this will be executed and hence wrong month
答案 3 :(得分:2)
您的代码可以正常工作,直到以下阻止:
if (mesec==3 || mesec==4 || mesec==5)
season= "spring";
并且再次检查剩余的以下两个条件:
if (mesec==6 || mesec==7 || mesec==8)
season= "summer";
if (mesec ==9 || mesec ==10 || mesec ==11)
season= "autumn";
并按上述条件Fails
执行Last
else阻止
else
season = "wrong month";
将season
变量设置为wrong month
答案 4 :(得分:1)
在第二种情况下,将执行所有if语句。因此输出。在4月的时候,是错误的月“。因为最后如果不匹配,则会转到其他部分。
答案 5 :(得分:1)
为您的代码添加了注释,以便您更轻松地遵循逻辑;现在应该很清楚,每个if语句都是一个独立的逻辑分支,而带有elseif的版本是一个逻辑语句。
int mesec = 4; // April
string season;
//mesec doesn't meet this condition
if (mesec == 12 || mesec == 1 || mesec == 2)
{
season = "winter";
}
//mesec does meet this condition
if (mesec==3 || mesec==4 || mesec==5)
{
season= "spring";
}
//mesec doesn't meet this condition
if (mesec==6 || mesec==7 || mesec==8)
{
season= "summer";
}
//mesec doesn't meet this condition
if (mesec == 9 || mesec == 10 || mesec == 11)
{
season = "autumn";
}
else //since mesec doesn't meet the if condition, it comes in here.
{
season = "wrong month";
}
答案 6 :(得分:1)
正如其他人所说,else
仅适用于最后一个if
。但这就是原因。
Java没有if-else-if-else
构造 - 只有if-else
。当您输入:
if (condA) {
doA();
} else if (condB) {
doB();
} else if (condC) {
doC();
} else {
doDefault();
}
...你真的打字:
if (condA) {
doA();
} else {
if (condB) {
doB();
} else {
if (condC) {
doC();
} else {
doDefault();
}
}
}
这是有效的,因为else
可以是一个块(用花括号括起来)或一个语句 - 包括if-else
语句。例如,在上面的示例中,if(condB)
具有使用语句而不是块的else
。该声明是if-else
声明:if (condC) { ... } else { ... }
。
另一方面,没有“else if”位,你就有了这个:
if (condA) {
doA();
} // no else
// New statement
if (condB) {
doB();
} // no else
// New statement
if (condC) {
doC();
} else {
doDefault();
}