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