为什么我的if-chain没有停止?

时间:2017-09-15 22:47:07

标签: java conditional

我今天和我的学生一起运行了一个程序,我们找到了一种方法,要求他们创建条件语句,在输入1-7对应于星期日到星期六之后提示用户在星期几。

一名学生想出了下面的代码,打印出"星期四",但它也打印出else语句。我无法弄清楚为什么它不会在d == 5停止。但是当我改变方法返回一个String并让每个if语句返回一个类似"星期日"有效。代码如下。为什么程序不会为void方法停止,而是停止String方法?

public static void dayOfWeek(int d) //This did not stop at d == 5.
    {
        if (d == 1)
        {
            System.out.println("Sunday");
        }
        if (d == 2)
        {
            System.out.println("Monday");
        }
        if (d == 3)
        {
            System.out.println("Tuesday");
        }
        if (d == 4)
        {
            System.out.println("Wednesday");
        }
        if (d == 5)
        {
            System.out.println("Thursday");
        }
        if (d == 6)
        {
            System.out.println("Friday");
        }
        if (d == 7)
        {
            System.out.println("Saturday");
        }
        else
        {
            System.out.println("Oops! Number must be between 1 and 7");
        }
    }

public static String dayOfWeek(int d) //This worked at d == 5.
{
    if (d == 1)
    {
        return "Sunday";
    }
    if (d == 2)
    {
        return "Monday";
    }
    if (d == 3)
    {
        return "Tuesday";
    }
    if (d == 4)
    {
        return "Wednesday";
    }
    if (d == 5)
    {
        return "Thursday";
    }
    if (d == 6)
    {
        return "Friday";
    }
    if (d == 7)
    {
        return "Saturday";
    }
    else
    {
        return "Oops! Number must be between 1 and 7";
    }
}

1 个答案:

答案 0 :(得分:0)

关键是在连续条件中使用else ifif之间存在差异。在您的情况

if (a) { .. }
if (b) { .. }
else { .. }

if (a)条件与if (b)无任何关系。这两个条件都是独立评估的,并且相应地执行它们因此,else条件仅附加到第二个条件,并且在bfalse时执行,无论之前执行了什么。

在任何情况下,你最好使用String[]来解决这种情况,例如:

private static final String[] days = { "Sunday", "Monday" ... };

public static String dayOfWeek(int d) {
  if (d >= 1 && d <= 7)
    return days[d-1];
  else
    throw new IllegalArgumentException("Day of the week out of bounds!");
}