当前位置:  开发笔记 > 编程语言 > 正文

未指定时,c#数组输出0

如何解决《未指定时,c#数组输出0》经验,为你挑选了1个好方法。

我正在尝试输出数组的奇数和偶数,我已经完成了所有工作但由于某种原因,当我创建一个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);
            }
        }

这是RemoveDuplicates方法:

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;
        }

作为输出我得到(vvv),但我不希望它们的开头都是0,我根本不想要0



1> Jon Skeet..:

但我不想在他们两个开头都有0,我根本不想要0

那么你不应该创建一个0s的数组,这就是你正在做的事情.

在你调用之前Array.Sort(odds),你的数组将包含所有奇数NumArray,然后是一堆0值(与偶数值一样多NumArray),因为当你构造一个数组时,它会自动填充元素的默认值每个元素的类型.如果整数NumArray是奇数,你将只有0值.

您只需要所需数量的元素,因此最好使用List,只需在需要时添加即可.ToArray()如果你真的需要,你可以调用最后创建一个数组.


@Brendon:当然,所以用你需要的东西创建一个`List `,然后调用`ToArray()`.或者更改代码的其余部分,使其不那么灵活:)
推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有