Krazy Dev - 2 months ago 5
C# Question

# Code not returning expected number of even and odds

I have a function that takes in a list of numbers and will return how many even numbers and odd numbers there are in the list. However, I passed in a list of numbers but I'm getting 0 results.

Here is my function -

`````` 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);

}
``````

Any ideas on what I'm doing wrong here? I debugged through it but none of the lists are incrementing.

Thanks

I agree with Schachaf Gortler's answer as well as p.s.w.g's comment. Just do:

``````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. mentioned, there's no such thing as a number that's both even and odd, so eliminate that completely.

Incidentally, numOfEvens++ retrieves the value and then increments it, which is why your code didn't work.