2013-10-23 49 views
3

我的移位问题。我有一个整数数组。数组中总是有3个整数。我将这些整数在数组中传递给分拣机。我想随机转移这些整数。例如:我传递数组中的整数1,2,3。我希望它随机化并以随机顺序返回值1,2,3。它确实是随机的,但是当我在一行中调用三次函数时,它将返回相同订单类型的整数。随机整数移位

示例:我调用该函数3次。 [1,2,3,4] [4,5,6] [7,8,9] 对它进行排序时,它总是返回以相同顺序排列的整数。 喜欢这个[2,1,3] [5,4,6] [8,7,9] 我希望它随机返回那些对,而不是以某种类型的顺序。

这是我的代码。

private Array returnRandomInts(int[] i) 
    { 
     Random rand = new Random(); 
     int c = 0; 
     int r = rand.Next(10); 
     int prev = 0; 
     int current = 0; 
     int temp; 

     while (c < r) 
     { 
      current = rand.Next(0, 3); 
      if (current != prev) 
      { 
       temp = i[prev]; 
       i[prev] = i[current]; 
       i[current] = temp; 
       c++; 
      } 
     } 

     return i; 
    } 

这是我如何称呼它

 returnRandomInts(index); 
     textBox1.Text = textBox1.Text + index[0].ToString() + " " + index[1].ToString() + " " + index[2].ToString() + ", "; 

他们总是按照一定的顺序。谢谢你的帮助。

+0

我会添加一些调试语句来打印出'r'和'current'的值。 –

回答

8

当函数被调用时,您总是创建一个新的Random实例。这使用一个时间依赖的种子。如果您连续快速调用该函数3次,则可能会使用相同的值进行播种,因此您将得到相同的伪随机序列。

而不是在函数中实例化Random,使rand类成员变量并在类构造函数中初始化它一次。这样,它将只被播种一次,并将提​​供适当的伪随机序列。

+0

很高兴认识你。你能告诉我如何解决它吗? – deathismyfriend

+1

@deathismyfriend我相应地编辑了我的答案。 – paddy

+0

工作完美非常感谢你。它会让我接受答案。 – deathismyfriend