代码不返回预期的偶数和奇数

Code not returning expected number of even and odds

我有一个函数,它接收一个数字列表,然后 return 列表中有多少偶数和奇数。但是,我传入了一个数字列表,但得到的结果为 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);

  }

关于我在这里做错了什么有什么想法吗?我调试了它,但 none 个列表在递增。

谢谢

你没有以正确的方式计算奇数 i%3 没有捕捉到同样是奇数的 5,试试这个

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

我认为你应该看看你的 isOdd

测试

我同意 Schachaf Gortler 的回答以及 p.s.w.g 的评论。只是做:

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++ 检索值 然后 递增它,这就是您的代码不起作用的原因。

使用 Linq Count 扩展。

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

当然,您不需要根据下面的评论对两个表达式求值。