2013-04-29 54 views
-1

的陣列中,我得到一個錯誤信息說:方法返回奇數數目的整數

此方法必須返回一個int類型的結果。

我的代碼:

public int countOdds (int[] values) { 
    int countOdd =0; 
    for (int i=0; i<values.length; i++) { 
    if (values[i] %2 != 0) { 
     countOdd++; 
     return countOdd; 
    } 
    } 
} 

回答

5

編譯器認爲該方法可能不會返回任何東西:

public int countOdds (int[] values) { 
    int countOdd =0; 
    for (int i=0; i<values.length; i++) { 
    if (values[i] %2 != 0){ 
     countOdd++; 
     return countOdd; 
    } 
    } 
    // what if this line is reached? 
} 

假設你values.length = 0運行它。該方法將返回什麼?

return說法應該是在不同的地方在代碼

+0

或者如果'values'中的所有項都是偶數? – chepner 2013-04-29 22:10:07

5

下面一行

return countOdd; 

應該是你的循環之外。

否則,當您到達第一個奇數時,您將返回1,或者如果沒有可能性,則根本無法返回聲明。

public int countOdds (int[] values) { 
    int countOdd =0; 
    for (int i=0; i<values.length; i++) { 
    if (values[i] %2 != 0) { 
     countOdd++; 
    } 
    } 
    return countOdd; 
} 
1

如果values陣列中有沒有奇數,那麼你的函數退出不返回int。如前面的答案所述,將return語句從循環中移出。

同時,由於​​的值是0爲偶數,1個用於奇數,奇號的數目等於所述總和超過​​i,允許你顯著縮短的代碼:

public int countOdds (int[] values) { 
    int i, count=0; 
    for (i=0; i<values.length; ++i) { 
    count += values[i]%2; 
    } 
    return count; 
} 

另一種版本使用按位與:

public int countOdds (int[] values) { 
    int i, count=0; 
    for (i=0; i<values.length; ++i) { 
    count += values[i] & 1; 
    } 
    return count; 
} 
-1

假如if語句永遠返回true,將方法返回什麼?不,它不會,所以你需要包含一個return語句,它將在if語句從不運行的情況下執行。

public int countOdds (int[] values) { 
    int countOdd =0; 
    for (int i=0; i<values.length; i++) { 
    if (values[i] %2 != 0) { 
     countOdd++; 
    } 
    } 
    return countOdd; 
} 
+1

沒有理由包含魔術數字'0';這只是將變量向下移動而不是數字的問題。 – Makoto 2013-04-29 22:29:19

+0

此方法僅返回零個或一個。 -1 – EJP 2013-04-30 01:20:20