2014-12-06 45 views
0

我遇到的代码的一个问题:为什么我得到0作为我的数组元素的值?

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/5d8msxhttp://prntscr.com/5d8nkm...。我的问题,即第一2(intarray [0]和intarray [1])总是0,为什么他们总是0,因为他们不应该。在函数之外初始化intarray。者均基于generateRandom是这个

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

回答

3

您在for循环每次创建一个新的数组:

intarray = new int[nr]; 

这部分应该是外循环。
由于intvalue-type,阵列的所有值初始化其default value (0)

+0

权......所以延缓...谢谢! – user2624407 2014-12-06 11:05:21

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.

0

我觉得你的逻辑是错误的。

每次迭代中你的第一个for循环,你要创建一个新的数组引用。由于您的阵列类型为int,因此阵列中的所有元素默认填充0

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

例如;

在你第一次迭代i0,你创建一个名为intarray数组全球化志愿服务青年与new int[3]你assing intarray[0]一些随机数(这是从03),但你的阵列(intarray[1]intarray[2])中的其他元素填充与0这是int的默认值。

在最后一次迭代;您的nr值为3,您的i2。这意味着你用一个从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); 
} 
相关问题