为什么我在数组元素中得到 0 作为值

本文关键字:数组元素 为什么 | 更新日期: 2023-09-27 18:33:29

我遇到了代码问题:

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 在函数外部初始化。顺便说一句,生成随机是这个

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

为什么我在数组元素中得到 0 作为值

每次都在

for 循环中创建一个新数组:

intarray = new int[nr];

这部分应该在循环之外。
因为int是一个value-type,数组的所有值都用它的default value (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。

我认为你的逻辑是错误的。

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

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

例如;

在你的第一次迭代中,i0的,你用new int[3]创建了一个名为intarray的数组引用,你断言intarray[0]一些随机数(从03(,但数组中的其他元素(intarray[1]intarray[2](填充了0这是int的默认值。

在最后一次迭代中,您的nr3,您的i 2。这意味着你用一个从03的随机数填充你的intarray[2],但由于你没有断言你的intarray[0]intarray[1]元素的任何值,所以它们仍然默认保留0值。

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

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);
}