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