我正在尝试输出数组的奇数和偶数,我已经完成了所有工作但由于某种原因,当我创建一个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
但我不想在他们两个开头都有0,我根本不想要0
那么你不应该创建一个0s的数组,这就是你正在做的事情.
在你调用之前Array.Sort(odds)
,你的数组将包含所有奇数NumArray
,然后是一堆0值(与偶数值一样多NumArray
),因为当你构造一个数组时,它会自动填充元素的默认值每个元素的类型.如果整数NumArray
是奇数,你将只有0值.
您只需要所需数量的元素,因此最好使用List
,只需在需要时添加即可.ToArray()
如果你真的需要,你可以调用最后创建一个数组.