我的换班问题。我有一个整数数组。数组中总是有3个整数。我将数组中的这些整数传递给分拣机。我想随机移动这些整数。示例:我在数组中传递整数1,2,3。我希望它随机化并以随机顺序返回值1,2,3。它确实随机化但是当我连续三次调用该函数时,它返回相同顺序类型的整数。
示例:我调用该函数3次。 [1,2,3] [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 :(得分:8)
在调用函数时,您始终在创建新的Random
实例。这使用时间依赖的种子。如果你快速连续3次调用该函数,它可能会以相同的值播种,因此你将得到相同的伪随机序列。
不是在函数中实例化Random
,而是使rand
成为一个类成员变量,并在类构造函数中初始化它一次。这样,它将只播种一次,并提供一个适当的伪随机序列。