2016-11-21 55 views
0

我想寫一個方法,將採取數組int []數字並返回數組中的所有奇數的總和。我不確定它爲什麼沒有返回正確的值。目前它應該返回「9」時返回「3」。我的方法添加奇數的數組的邏輯有什麼問題

public static void main(String[] args) { 
    int[] numbers = { 2, 1, 5, 3, 0 }; 
    System.out.println(oddballsum(numbers)); 
} 

public static int oddballsum(int array[]) { 

    int sumodds = 0; 

    for (int i = 0; i < array.length; i++) { 
     if (array[i] % 2 != 0) { sumodds = +(array[i]);} 

    } 
    return sumodds; 
} 

回答

4

sumodds =+ (array[i])意思是 「的array[i]值分配給sumodds」。 +()沒有區別 - 它在語義上與sumodds = array[i]相同。如果你只是想要數組中的最後一個奇數值,請使用它。

sumodds += array[i]指「array[i]增加sumodds價值。如果你想在陣列中總結的奇數值使用此功能。

2

錯誤的原因是在這一段代碼...

if (array[i] % 2 != 0) { 
    sumodds = +(array[i]); 
} 

你是不是求和或堆積你只是用一個積極的跡象

末分配值,你的代碼剛剛返回數組中找到的最後一個零頭......

你必須做的,而不是像這樣:

if (array[i] % 2 != 0) { 
    sumodds += array[i]; 
} 
+1

嗨@flakes ...感謝評論...我將inmediatly更新 –

0

如果你寫太多的代碼,你有更多的機會去錯了,你應該用java 8流:

int sumOdd = Arrays.stream(array).filter(t -> t%2==1).sum(); 
    System.out.println(sumOdd); 
+2

引述用戶安德烈亞斯,誰是意譯傑米·薩溫斯基:「有些人,當面臨着一個問題,會認爲」我知道,我將使用Java 8流「現在他們有兩個問題。」流真的是矯枉過正 - 這是一個簡單的語法錯誤。 –

+0

我認爲初學者也應該知道Java Streams,所以他們有可能選擇如何面對問題。他們應該注意什麼時候以聲明的方式來面對問題(並使用流),而當問題需要寫出指令列表時。在這種情況下,更多地指出了聲明性方法。 – user6904265

+0

如果問題是'我如何從int數組中求和奇數'而不是尋求他們已經編寫的非常具體的函數的幫助,因爲他們有語法問題,這可能適用。 – Leith

0

的問題是與你的加法運算=+。如果要添加新值並將其分配給同一個變量,則應爲+=。請參閱下面的工作代碼。

public static void main(String[] args) { 
    int[] numbers = {2, 1, 5, 3, 0}; 
    System.out.println(oddballsum(numbers)); 
} 

public static int oddballsum(int array[]) { 
    int sumodds = 0; 
    for(int element : array) { 
     if(element % 2 != 0) { 
      sumodds += element; 
     } 
    } 
    return sumodds; 
}