2017-09-15 47 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