我有一个小问题:我在这段代码中得到了所有奇数,但我不知道为什么它不会加起来所有的奇数负值。我对编码还是比较新的,所以如果你能保持简单,我会很感激。谢谢。
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();
答案 0 :(得分:10)
对于负数%
,将返回-1
或0
。您仅针对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);
}
}
}