将奇数从数组复制到另一个数组

时间:2018-05-24 08:38:59

标签: c# arrays

我很喜欢编程并且正在努力完成这项任务:

在数组X [20]中输入从1到30的随机数,在数组Y中仅输入来自数组X的奇数。 打印Y。

int[] x = new int[20];
Random rnd = new Random();
int counter = 0;
int[] y;

for (int i = 0; i < x.Length; i++)
{
    x[i] = rnd.Next(1, 30);

    if (x[i] % 2 !=0 )
    {
        y = new int[counter];
        counter++;
        y[counter] = x[i];          
    }
}

foreach (int number in y)
{
    Console.WriteLine(number);
}

我在使用奇数编号填充Y数组而没有定义Y的长度时遇到了问题,我尝试添加计数器但总是遇到一些错误,  如果有人可以帮我提一些有用的建议,谢谢!

3 个答案:

答案 0 :(得分:3)

这看起来像是家庭作业,所以我想使用更合适的集合,例如re.search(r"(((?P<name>tom|jack).*(?P<property>car|bike))|((?P<property2>car|bike).*(?P<name2>tom|jack)))", s2) 是不可能的,就像使用Linq一样。

List<int>,您重新初始化阵列。每次迭代都会发生这种情况,因此您的最终数组只保留最新的添加值,之前的所有值都将设置为默认值:0。

您可以通过设置断点,单步执行代码并检查变量来调试代码,从而看到了这一点。然后,您可以提供更合适的问题描述而不是“#34;得到一些错误&#34;。

如果您知道输入永远不会大于20,那么您可以将输出数组初始化为相同的大小,并保留一个计数器来计算您复制的值(后者已经完成)。

然后在打印时,只使用y = new int[counter];循环而不是for打印元素直到该计数。

这样的事情:

foreach

答案 1 :(得分:3)

您的问题是,您为找到的每个奇数创建了一个新的y数组。您只需要创建一次数组然后填充它。

由于您不知道会有多少个奇数,我建议改为使用List<int>

int[] x = new int[20];
Random rnd = new Random();
List<int> y = new List<int>(); // create the list before the loop


for (int i = 0; i < x.Length; i++)
{
    x[i] = rnd.Next(1, 30);
    if (x[i] % 2 !=0 )
        y.Add(x[i]);  // add odd number to list
}
foreach (int number in y)
{
    Console.WriteLine(number);
}

答案 2 :(得分:1)

请参阅,在您的情况下,您不知道该随机数组中的奇数个数。因此,如果您遵循当前的实现,那么Array将不是正确的选择。如果你想把输出作为数组,那么为什么不是一个Where int[] randomIntegers = new int[20]; Random rnd = new Random(); for (int i = 0; i < randomIntegers.Length; i++) { randomIntegers[i] = rnd.Next(1, 30); } 的简单LINQ:

首先,您正在当前收集所有随机数:

x

现在,int[] oddValues = randomIntegers.Where(a=> a % 2 !=0).ToArray(); 中的所有随机数现在执行以下操作:

https://code.jquery.com/jquery-3.3.1.slim.js