我很喜欢编程并且正在努力完成这项任务:
在数组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的长度时遇到了问题,我尝试添加计数器但总是遇到一些错误, 如果有人可以帮我提一些有用的建议,谢谢!
答案 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