数组未在foreach循环中正确初始化

时间:2014-12-09 16:00:56

标签: c# random generator

所以我试图制作一个随机数生成器:

private static void init() 
{
    int[] integ = new int[10];

    Random random = new Random();

    // init
    foreach (int integer in integ)
    {
        integ[integer] = rand.Next(5,35);
    }


    foreach (int b in integ)
    {
        Console.WriteLine("Byte = " + b);
    }
}

static void Main(string[] args)
{
    init();

    Console.ReadKey();
}

但出于某种原因,当我运行它时,会打印出来:

Byte = (*random number here*)
Byte = 0
Byte = 0
etc...

我多次运行以确保,每次只有第一个非零数字。

提前感谢任何建议。

1 个答案:

答案 0 :(得分:4)

让我们来看看它的作用:

foreach (int integer in integ)
{
    integ[integer] = rand.Next(5,35);
}

基本上,foreach循环遍历integ(最初都是0),并在integ中设置该值。 {1}}到一个随机数。所以它只会填充数组中的第一项。

要初始化数组,请改为使用for循环:

for (int i = 0; i < integ.Length; i++)
{
    integ[i] = rand.Next(5,35);
}

或者如果你对Linq的一点点感到满意:

Random random = new Random();
int[] integ = Enumerable.Repeat(0, 10)
                        .Select(i => random.Next(5, 35))
                        .ToArray();

正如 Blindy 指出的那样,如果你想要做的就是打印价值,你甚至不需要数组:

Random random = new Random();
for (int i = 0; i < 10; i++)
{
    Console.WriteLine("Byte = {0}", rand.Next(5,35));
}