Java 为什么我的if链没有停止?

Java 为什么我的if链没有停止?,java,conditional,Java,Conditional,今天我和我的学生一起运行了一个程序,我们找到了一个方法,要求他们创建条件语句,在输入1-7(对应于星期日到星期六)后,在星期几提示用户 一个学生想出了下面的代码,它打印出“星期四”,但它也打印出else语句。我不明白为什么它不停在d==5。但是当我改变方法以返回一个字符串,并让每个if语句返回一个类似“Sunday”的字符串时,它工作了。代码如下。为什么程序不是因为void方法而停止,而是因为String方法而停止 public static void dayOfWeek(int d) //Th

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

一个学生想出了下面的代码,它打印出“星期四”,但它也打印出else语句。我不明白为什么它不停在d==5。但是当我改变方法以返回一个字符串,并让每个if语句返回一个类似“Sunday”的字符串时,它工作了。代码如下。为什么程序不是因为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";
    }
}

关键是当在连续条件句中使用时,
else if
if
之间存在差异。在你的情况下

if (a) { .. }
if (b) { .. }
else { .. }
if(a)
条件与
if(b)
没有任何关系。这两个条件都是独立评估的,它们的主体也会相应地执行。因此,
else
条件仅附加到第二个条件,并且将在
b
false
时执行,而不管之前执行了什么

在任何情况下,对于这种情况,您最好使用
字符串[]
,例如:

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!");
}
private static final String[]days={“星期日”、“星期一”…};
公共静态字符串dayOfWeek(int d){

如果(d>=1&&d为什么要这样做?为什么你认为
else
也属于另一个
if
s,而不仅仅是最后一个?在这种情况下没有“if链”。你有一堆连续但独立的if,最后还有if和else,它们都属于最后一个if。因此,第一个if运行,无所谓r发生了什么第二个运行,不管发生什么第三个运行,依此类推,直到最后一个运行,它有一个else和一个不匹配的条件,因此您可以看到else的输出。第二个示例只起作用是因为
return
语句,而不是因为返回
String
的方法e
else
块仅与最后一个
if
语句关联。您可能想到的构造是
if{…}else if{…}否则
等。但这不是您拥有的。通过检查
天.长度
,当它不可避免地被修改为返回10天法国共和国日历周的天时,这将起作用。