2016-08-04 5 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); 

    } 

任意のアイデア私が間違ってここにやっているものに?私はそれを通してデバッグしましたが、リストのどれも増分していません。あなたは正しい方法で I%3を奇数計算されていません

おかげ

+4

[奇数](https://simple.wikipedia.org/wiki/Odd_number)は「2の倍数ではない」と定義されています。 'i%3 == 0'は**ではありません**あなたが奇数をテストする方法はありません。そして、数字は偶数と奇数の両方ではありません。 –

+0

誤って私のコメントを削除しました...確かに 'numOfBoth'は、渡された総数のいずれかでなければなりません。 'numOfBoth = numOfEvens + numOfOdds'か、それ以外に何があるのか​​わかりません – Josh

+0

@ p.s.w.gこれは私が考えていると思います。 –

答えて

4

私はSchswaf 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++; 
} 

as p.s.w.g.前述のように、偶数と奇数の両方の数字はないので、完全に削除してください。

numOfEvens ++は値を取得してからをインクリメントするため、コードが機能しませんでした。

+0

他の答えやコメントは_your_答えで引用する必要はありません。 – stuartd

+0

これはうまくいった!しかし、私の表現がなぜ動いていないのか、私は混乱しています。 numOfEvens = isEvenと書いたとき? numOfEvens ++:numOfEvens; numOfEvensを0にしました。 –

+0

はい、ありがたいことに、私の一部では誤植です。 – EJoshuaS

5

も奇数である5をキャッチしていない、私はあなたが見ているべきだと思う

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

True - 奇数のテストでも、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

リストを2度列挙する必要はありません。 'numOfEvents = numbers.Count - numOfOdds;' –

+0

確かに、私は単純に両方を独立したものとして表示することを意味しました。私はあなたに同意する:我々は一緒に両方を必要としない –

関連する問題