为什么我的数组元素中的值为0?

时间:2014-12-06 10:45:45

标签: c# arrays

我遇到代码问题:

for (int i = 0; i < nr; i++)
{
    intarray = new int[nr];
    intarray[i] = generateRandom(4);
    Console.WriteLine(intarray[i]+"Test1 "+i);
}

for (int i = 0; i < intarray.Length; i++)
{
    Console.WriteLine(intarray[i]+"Test2 "+i);
}

//nr = 3

一些输出:http://prntscr.com/5d8msx http://prntscr.com/5d8nkm ... 。我的问题是前2(intarray [0]和intarray [1])总是0 ,为什么他们是总是0,因为他们不应该这样做。 intarray在函数外部初始化。 Btw generateRandom就是这个

Random r = new Random();
static int generateRandom(int max)
{
    int randnum = r.Next(0, max);
    return randnum;
}

3 个答案:

答案 0 :(得分:3)

每次都在for循环中创建一个新数组:

intarray = new int[nr];

这部分应该在循环之外。
由于intvalue-type,因此数组的所有值都使用其default value (0)

进行初始化

答案 1 :(得分:0)

在外部循环初始化数组。

   var intarray = new int[nr];
   for (int i = 0; i < nr; i++)
    {

        intarray[i] = generateRandom(4);
        Console.WriteLine(intarray[i]+"Test1 "+i);
    }
    for (int i = 0; i < intarray.Length; i++)
    {
        Console.WriteLine(intarray[i]+"Test2 "+i);
    }

您现在正在做的是每次都创建新阵列。和int初始化为0。

答案 2 :(得分:0)

我认为你的逻辑错了。

第一个for循环中的每次迭代,您都在创建一个新的数组引用。由于您的数组类型为int,因此数组的所有元素都填充{{ 1}}默认情况下。

由于在Random.Next(int, int) overload中,最小值是包含的,因此可能生成0

例如;

在您的第一次迭代中,0i,您创建了一个名为0的数组referance intarray,并为new int[3]提供了一些随机数(即从intarray[0]0),但数组中的其他元素(3intarray[1])都填充了intarray[2],这是{{1}的默认值}}

最后一次迭代;您的0值为intnr3。这意味着您使用i2的随机数填充intarray[2],但由于您未对03元素赋予任何价值,默认情况下,它们仍保留intarray[0]值。

作为解决方案,您应该在for循环之外初始化数组,例如;

intarray[1]