数组添加奇数值

时间:2014-02-28 16:42:36

标签: c# arrays math

我有一个小问题:我在这段代码中得到了所有奇数,但我不知道为什么它不会加起来所有的奇数负值。我对编码还是比较新的,所以如果你能保持简单,我会很感激。谢谢。

int total2 = 0;
int[] A = new int[12] {2,3,-5,-67,23,-4,243,-23,2,-45,56,-9};
for (int i = 0; i < A.Length; i++)
{
    if (A[i] % 2 == 1)
    {
        total2 += A[i];
    }
    Console.WriteLine("index: {0}  value: {1} total: {2}",
     i, A[i], total2);
}

Console.ReadKey();

3 个答案:

答案 0 :(得分:10)

对于负数%,将返回-10。您仅针对1检查它是否为正数。

你可以这样做:

if ((A[i] % 2 == 1) || (A[i] % 2 == -1))

或使用A[i] % 2 != 0

您也可以使用Math.Abs之类的:

if(Math.Abs(A[i] % 2) == 1)

答案 1 :(得分:1)

出于您的目的,您可以考虑IF语句的每个元素的绝对值,然后在计算中使用实际值。

要改进@ NullUserExceptions的建议,你可以做到

if( Convert.ToBoolean( A[i] % 2 ) ){
    sum += i;
}

这是,任何非零值都将允许总和发生。

答案 2 :(得分:1)

如果您使用的是LINQ,可以简化如下:

namespace TestConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] A = new int[12] {2,3,-5,-67,23,-4,243,-23,2,-45,56,-9};

            // using LINQ method chaining syntax 
            var result = A.Where(x => x % 2 != 0).Select(r => r);

            // Or comprehensive syntax
            //var result = from r in
            //             A.Where(x => x % 2 != 0)
            //             select r;
            var total2 = result.Sum();
            int i = 0;
            foreach (var r in result)
            {
               Console.WriteLine("index: {0}  value: {1} total: {2}", i, r, total2);
               i++;
            }
            Console.ReadKey(true);
        }            
    }
}