2016-08-04 80 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