随机整数移位

时间:2013-10-23 01:10:57

标签: c#

我的换班问题。我有一个整数数组。数组中总是有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() + ", ";

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

1 个答案:

答案 0 :(得分:8)

在调用函数时,您始终在创建新的Random实例。这使用时间依赖的种子。如果你快速连续3次调用该函数,它可能会以相同的值播种,因此你将得到相同的伪随机序列。

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