我遇到代码问题:
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;
}
答案 0 :(得分:3)
每次都在for循环中创建一个新数组:
intarray = new int[nr];
这部分应该在循环之外。
由于int
是value-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
。
例如;
在您的第一次迭代中,0
为i
,您创建了一个名为0
的数组referance intarray
,并为new int[3]
提供了一些随机数(即从intarray[0]
到0
),但数组中的其他元素(3
和intarray[1]
)都填充了intarray[2]
,这是{{1}的默认值}}
最后一次迭代;您的0
值为int
,nr
为3
。这意味着您使用i
到2
的随机数填充intarray[2]
,但由于您未对0
和3
元素赋予任何价值,默认情况下,它们仍保留intarray[0]
值。
作为解决方案,您应该在for循环之外初始化数组,例如;
intarray[1]