c#数组未指定时输出0

c#数组未指定时输出0,c#,arrays,class,C#,Arrays,Class,我试图输出一个数组的奇数和偶数,我已经让它全部工作了,但出于某种原因,当我创建一个foreach循环并输出每个奇数/偶数时,它以零开始 它的设置方式是,用户输入10个数字,每个字母之间有一个逗号(以字符串开头),然后删除逗号,将数字转换为int,并将其放置在int数组中,然后在另一个类中使用。我输入1,2,3,4,5,6,7,8,9,1来测试它 Odds(ai.Odds); Evens(ai.Evens); Console.ReadKey(); } publ

我试图输出一个数组的奇数和偶数,我已经让它全部工作了,但出于某种原因,当我创建一个foreach循环并输出每个奇数/偶数时,它以零开始

它的设置方式是,用户输入10个数字,每个字母之间有一个逗号(以字符串开头),然后删除逗号,将数字转换为int,并将其放置在int数组中,然后在另一个类中使用。我输入1,2,3,4,5,6,7,8,9,1来测试它

    Odds(ai.Odds);
    Evens(ai.Evens);



    Console.ReadKey();
}
    public static void Odds(int[] odds)
    {
        Console.WriteLine("\nOdds:");
        foreach (var odd in odds)
        {
            Console.Write(odd + " ");   
        }
    }

public static void Evens(int[] evens)
{
    Console.WriteLine("\nEvens:");
    foreach (var even in evens)
    {
        Console.Write(even + " ");
    }
}
在另一节课上表演魔术:

public int[] Odds
        {
            get
            {
                int count = 0;
                int[] odds = new int[NumArray.Length];
                string[] oddNums = {"1", "3", "5", "7", "9"};
                foreach (int num in NumArray)
                {
                    foreach (string oddNum in oddNums)
                    {
                        if (num.ToString().EndsWith(oddNum))
                        {
                            odds[count++] = num;
                        }
                    }
                }
                Array.Sort(odds);
                return RemoveDuplicates(odds);
            }
        }

        public int[] Evens
        {
            get
            {
                int count = 0;
                int[] evens = new int[NumArray.Length];
                string[] evenNum = {"0", "2", "4", "6", "8"};
                foreach (int num in NumArray)
                {
                    foreach (string oddNum in evenNum)
                    {
                        if (num.ToString().EndsWith(oddNum))
                        {
                            evens[count++] = num;
                        }
                    }
                }
                Array.Sort(evens);
                return RemoveDuplicates(evens);
            }
        }
以下是RemovedUpplicates方法:

private int[] RemoveDuplicates(int[] numbers)
        {
            if (numbers.Length == 0)
            {
                return numbers;
            }
            int[] uniques = new int[numbers.Length];

            int previousVal = numbers[0];
            uniques[0] = numbers[0];
            int count = 1;
            for (int i = 1; i < numbers.Length; i++)
            {
                if (numbers[i] == previousVal) continue;
                previousVal = numbers[i];
                uniques[count++] = numbers[i];
            }
            Array.Resize(ref uniques, count);
            return uniques;
        }
private int[]RemoveDuplicates(int[]number)
{
如果(number.Length==0)
{
返回号码;
}
int[]uniques=新的int[numbers.Length];
int previousVal=数字[0];
唯一性[0]=数字[0];
整数计数=1;
for(int i=1;i
作为一个输出,我得到了(vvv),但我不希望它们的开头都是0,我根本不想要0

但我不想在它们的开头都是0,我根本不想要0

那么您不应该创建一个0为in的数组,这就是您正在做的

在调用
Array.Sort(赔率)
之前,您的数组将包含
NumArray
中的所有奇数,然后是一组0值(与
NumArray
中的偶数值相同),因为在构建数组时,它会自动填充每个元素的元素类型的默认值。如果整个
NumArray
都是奇数,则只有0个值

您只需要所需数量的元素,因此最好使用
List
,并在需要时添加到其中。如果确实需要,可以调用
ToArray()
在末尾创建一个数组

但我不想在它们的开头都是0,我根本不想要0

那么您不应该创建一个0为in的数组,这就是您正在做的

在调用
Array.Sort(赔率)
之前,您的数组将包含
NumArray
中的所有奇数,然后是一组0值(与
NumArray
中的偶数值相同),因为在构建数组时,它会自动填充每个元素的元素类型的默认值。如果整个
NumArray
都是奇数,则只有0个值


您只需要所需数量的元素,因此最好使用
List
,并在需要时添加到其中。如果确实需要,您可以调用
ToArray()
在末尾创建一个数组。

为偶数和赔率数组赋值时,使用[count++]作为索引。这意味着它从不分配索引0,并且从数组初始化时起,它的默认值为0。

当您将值分配给偶数和赔率数组时,您使用[count++]作为索引。这意味着它永远不会分配索引0,并且从数组初始化时起,它的默认值为0。

如果您发布一个简短但完整的示例程序,并对其进行适当的格式设置,将更容易帮助您,我输入1,2,3,4,5,6,7,8,9,1来测试它。输入的输出是什么以及你期望它是什么是有用的。另外,这是一种非常可怕的方法来判断事物是奇数还是偶数。与其依赖字符串中的最后一个数字,处理它的简单方法是将字符串转换为数字,然后执行
num%2
,如果是偶数,则为
0
,如果是奇数,则为
1
。@MattBurland:如果是奇数和负数,则为-1。。。我通常使用
num&1
来代替。@JonSkeet:Fair point,但我通常只测试
num%2==0
,所以如果奇数是
1
-1
不重要(如果不是偶数,那么它就是奇数)。但是我非常喜欢
&1
,从现在起我可能不得不使用它。如果你能发布一个简短但完整的示例程序,对其进行适当的格式化,而不是在方法的中途以代码开头的零碎部分,那么这将使你更容易获得帮助。我输入1,2,3,4,5,6,7,8,9,1来测试它。,包含输入的输出和您期望的输出是非常有用的。而且,这是一种非常糟糕的方法来确定某个东西是奇数还是偶数。与其依赖字符串中的最后一个数字,处理它的简单方法是将字符串转换为数字,然后执行
num%2
,如果是偶数,则为
0
,如果是奇数,则为
1
。@MattBurland:如果是奇数和负数,则为-1。。。我通常使用
num&1
来代替。@JonSkeet:Fair point,但我通常只测试
num%2==0
,所以如果奇数是
1
-1
不重要(如果不是偶数,那么它就是奇数)。但是我非常喜欢
&1
,从现在起我可能不得不使用它。不,
count++
将在第一次迭代中得到0,因为它是后增量,而不是前增量。0值将位于数组的末尾。正如Conrad所指出的,增量后和增量前唯一相关的时间是在显示值时;就逻辑而言,它没有区别。嗯,没有。
count++
增加变量,但表达式的结果是原始值。试试看<代码>整数[]x=新整数[10];整数计数=0;x[计数++]=5;Console.WriteLine(x[0])将打印5,因此它被分配到索引0。@John