0

你好,我从我的书中得到了关于 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);
}

我总是得到错误的输出,即“当它是四月时,它是错误的月份”

当我们使用 if-else-if 变量 season 时保存它是哪个季节,但是当我们只使用 if-else 时它只从 else 语句中保存季节?谁能解释我的问题是什么?

4

7 回答 7

5

第二个程序中的else语句仅适用于最后一个if

if (mesec ==9 || mesec ==10 || mesec ==11)

因此,只有当月份是 9、10 或 11 时,它才会按照您期望的方式工作。

于 2013-11-14T16:55:24.760 回答
3

谁能解释我的问题是什么?

通过说:

if (mesec ==9 || mesec ==10 || mesec ==11)
    season= "autumn";
else
    season = "wrong month";

您覆盖season,即如果较早,则为mesec,但上述条件确实评估为 ,从而设置为。4seasonspringfalseseasonwrong month

于 2013-11-14T16:56:01.450 回答
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
于 2013-11-14T16:57:28.070 回答
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它执行Lastelse 块

 else
        season = "wrong month";

它将您的season变量设置为wrong month

于 2013-11-14T16:59:34.117 回答
1

在第二种情况下,所有 if 语句都将被执行。因此输出。当是四月,是错误的月份”。因为最后一个 if 不匹配,它会转到 else 部分。

于 2013-11-14T16:58:17.663 回答
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";
            }
于 2013-11-14T17:06:06.940 回答
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();
}
于 2013-11-14T17:11:58.807 回答