2016-10-16 90 views
-2

我是一位Java編程的新手,我很努力地理解爲什麼事情不起作用。我有一個名爲Geek.java的類,下面有一大堆方法。我被要求爲我的課程做的一個方法是找到3個整數的最小整數。Eclipse吐出「此方法必須返回int類型的結果」

public int smallest(int num1, int num2, int num3){ 
    if (num1 < num2){ 
     if (num1 < num3){ 
      return num1; 
     } 
    } 
    if (num2 < num1){ 
     if (num2 < num3){ 
      return num2; 
     } 
    } 
    if (num3 < num1){ 
     if (num3 < num2){ 
      return num3; 
     } 
    } 
    else 
     return num1; 
} 

忽略邏輯錯誤,因爲我明白,必須有一個默認的返回值,如果沒有這由其他被指定的,如果條件匹配的。然而,eclipse仍然告訴我它必須返回一個int類型的值。我很抱歉,如果這個答案已經被陳述過,但我似乎無法找到它。 謝謝

+1

並不是所有的控制路徑返回一個值。 –

+0

如果進入其中一個如果沒有相應的塊,該怎麼辦?嵌套ifs?那麼會發生什麼,你的方法會返回什麼? – Li357

回答

1

如果你只是想明白爲什麼不起作用。這是因爲,並非所有的控制路徑都返回一個值。

如果你改變你的代碼如下:

if (num1 < num2 && num1 < num3){ 
    return num1; 
} 
else if (num2 < num1 && num2 < num3){ 
    return num2; 
} 
else{ 
    return num3; 
} 

看,現在所有的控制路徑將返回一定的價值。

但我不喜歡這種尋找最低元素的方式。您可以編寫一個函數min,它告訴兩個數字中的最小值,然後使用該函數來編寫smallest函數。

public static int min(int a, int b){ 
    if (a < b) 
     return a; 
    else 
     return b; 
} 

而現在的功能smallest

public static int smallest(int a, int b, int c){ 
    return min(min(a, b), c); 
} 
+0

噢好吧,爲什麼當我註釋掉else語句並且在結尾沒有給出錯誤時留下返回num1? –

+0

因爲在這種情況下,仍然所有的控制路徑都返回一個值。 –

+0

最後有一個返回語句意味着如果流從所有'if-else'組合到該函數的結尾,該返回語句將返回一些值。 –

0

那是因爲你嵌套if語句,這可能會導致你的代碼沒有返回值:

if (num3 < num1) { 
     if (num3 < num2) { 
      return num3; 
     } 
    } else 
     return num1; 

在這種情況下,我們說num3 < num1num3不低於num2少,則您的代碼將不返回任何值,因爲內部if條件(num3 < num2)沒有對應的else塊。

更改您的代碼這樣的事情應該工作,如控制流,然後有一個明確的流程,並會始終返回一個值:

if (num3 < num1 && num3 < num2) { 

     return num3; 

    } else 
     return num1; 

類似的變化應當向其他if報表進行。

相關問題