不明白这两个程序之间的区别,一个是if-else第二个是if-else-if

时间:2013-11-14 16:53:01

标签: java

您好我的书中有关于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语句的季节?任何人都可以解释我的问题是什么?

7 个答案:

答案 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之前4season,则springfalse,但上述情况的评估结果为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();
}