为什么我在数组元素中得到 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;
}
每次都在
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
。
例如;
在你的第一次迭代中,i
是0
的,你用new int[3]
创建了一个名为intarray
的数组引用,你断言intarray[0]
一些随机数(从0
到3
(,但数组中的其他元素(intarray[1]
和intarray[2]
(填充了0
这是int
的默认值。
在最后一次迭代中,您的nr
值3
,您的i
2
。这意味着你用一个从0
到3
的随机数填充你的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);
}