2016-08-04 56 views
0

我有一個函數,它接受一個數字列表並返回列表中有多少偶數和奇數。然而,我通過了一個數字列表,但我得到0個結果。代碼不返回期望的偶數和賠率數

這裏是我的功能 -

public static string HowManyEvenAndOdds(List<int> numbers) 
    { 
    int numOfOdds = 0; 
    int numOfEvens = 0; 
    int numOfBoth = 0; 

    foreach (int i in numbers) { 
     bool isEven = i % 2 == 0; 
     bool isOdd = i % 3 == 0; 

     numOfBoth = isEven && isOdd ? numOfBoth++ : numOfBoth; 
     numOfEvens = isEven ? numOfEvens++ : numOfEvens; 
     numOfOdds = isOdd ? numOfOdds++ : numOfOdds; 
    } 

    return string.Format("This list has {0} odd numbers,\n{1} even numbers,\nand {2} numbers that are even and odd.", numOfOdds, numOfEvens, numOfBoth); 

    } 

上,我做錯了什麼在這裏的任何想法?我通過它進行了調試,但沒有一個列表正在增加。

感謝

+4

[奇數](https://simple.wikipedia.org/wiki/Odd_number)被定義爲「不是2的倍數的數字」。 '我%3 == 0'是**不是**你如何測試奇數。沒有一個數字可以是偶數和奇數。 –

+0

不小心刪除了我的評論......當然'numOfBoth'應該只是通過的總數,例如'numOfBoth = numOfEvens + numOfOdds'或者,我不確定它還會是什麼 – Josh

+0

@ p.s.w.g我想我推翻了這一點。 –

回答

4

我同意Schachaf Gortler的回答以及pswg的評論。只要這樣做:

foreach (var number in numbers) 
{ 
    // A number is even if, and only if, it's evenly divisible by 2 
    if (number % 2 == 0) 
     numEvens++; 
    // A number is odd if, and only if, it's NOT evenly divisible by 2 
    // Alternatively, a number is odd if it isn't even and vice versa 
    else 
     numOdds++; 
} 

由於p.s.w.g.上面提到的,不存在偶數和奇數的數字,所以完全消除這個數字。

順便說一句,numOfEvens ++檢索值,然後將其遞增,這就是爲什麼您的代碼無法工作。

+0

您不需要在_your_答案中引用其他答案和評論,只需執行代碼即可。 – stuartd

+0

這工作!但我很困惑爲什麼我的表情沒有運行。當我寫了numOfEvens = isEven? numOfEvens ++:numOfEvens; 它保留numOfEvens爲0. –

+0

是的,謝謝,我的印刷錯誤。 – EJoshuaS

5

你沒有正確的方式 我%3不趕5這也是奇數計算奇,試試這個,而不是

bool isEven = i % 2 == 0; 
bool isOdd =!isEven; 
+0

正確 - 對奇數的測試也忽略了其他奇數的很多*,例如1,7,11,13和17.實際上,它根據定義忽略了每個*素數,素數如5和25. – EJoshuaS

1

我想你應該看看在你測試isOdd

1

使用Linq Count擴展名。

int numOfOdds = numbers.Count(x => x % 2 != 0); 
int numOfEvens = numbers.Count(x => x % 2 == 0); 

當然,您不需要根據下面的註釋來評估這兩個表達式。

+1

無需枚舉兩次列表。 'numOfEvents = numbers.Count - numOfOdds;' –

+0

當然,我的意思是簡單地將它們都顯示爲獨立的。我同意你的看法:我們不需要在一起 – 2016-08-04 17:39:29