2017-09-15 94 views
-1

我今天正在和我的学生一起运行一个程序,并且我们来到一个方法,要求他们创建条件语句,在周日到周六对应的1 - 7输入后的星期几提示用户。为什么我的if-chain不停止?

一位学生想出下面的代码打印出“星期四”,但它也打印出else语句。我不知道为什么它不停止在d == 5.但是,当我改变方法返回一个字符串,并让每个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"; 
    } 
} 
+0

为什么要呢?你为什么认为'else'属于另一个'if's,而不仅仅是最后一个呢? – Tom

+2

在这种情况下没有'if链'。你有一堆连续的,但独立的ifs,最后,如果与另一个,如果单独属于那个决赛。那么会发生什么呢,第一个如果运行,不管第二个运行的是什么,不管第三个运行的是什么,直到最后一个有一个else和一个不匹配的条件,所以你看到else的输出。 – pvg

+1

第二个例子只是因为返回语句而不是因为返回字符串的方法。但是@Tom声明'else'块只与最后一个'if'语句相关联。 –

回答

0

的一点是,有在连续的条件语句中使用时的else if和和if之间的差。在你的情况

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!"); 
} 
+0

与'days.length'检查,这将工作时,它不可避免地修改为返回10天法国共和党日历周的日子。 – pvg