3

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

它们总是按一定的顺序排列。谢谢你的帮助。

4

1 回答 1

8

Random调用函数时,您总是在创建一个新实例。这使用时间相关的种子。如果你快速连续调用该函数 3 次,它很可能会以相同的值作为种子,因此你将得到相同的伪随机序列。

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

于 2013-10-23T01:14:52.813 回答