使用按钮c#防止随机数重复

时间:2013-12-06 13:32:12

标签: c# arrays random

我的应用程序是用c#编写的。单击按钮(下一个)时,两个图像将随机更改。我怎么能防止重复的图像?

   Random randomclass = new Random();

            int RN = randomclass.Next(0, RL + 1);

                Stream myStream = myAssembly.GetManifestResourceStream("namespace.folder.Array[RN].img1");
                Image Aimg = Image.FromStream(myStream);
                pictureBox8.Image = Aimg;
                Stream myStream1 = myAssembly.GetManifestResourceStream("namespace.folder.Array[RN].img2");
                Image Dimg = Image.FromStream(myStream1);
                pictureBox4.Image = Dimg;

            h = lessons[RN];
            lessons[RN] = lessons[RL];
            lessons[RL] = h;
          RL-- ;

3 个答案:

答案 0 :(得分:1)

你可以做的最好的事情,因为luaan在评论中建议你可以简单地改组数组。 将您的图像(或对它们的引用)放在一个数组/列表中,并使用下面的代码(我从here复制)随机随机播放图像。

static Random random = new Random();

public static IEnumerable<T> RandomPermutation<T>(IEnumerable<T> sequence)
{
    T[] retArray = sequence.ToArray();


    for (int i = 0; i < retArray.Length - 1; i += 1)
    {
        int swapIndex = random.Next(i, retArray.Length);
        if (swapIndex != i) {
            T temp = retArray[i];
            retArray[i] = retArray[swapIndex];
            retArray[swapIndex] = temp;
        }
    }

    return retArray;
}

一旦你将数组简单地循环播放,数组中的evry图像将以随机方式显示一次。

答案 1 :(得分:0)

您可以保留以前使用的图像的数组(或类似的数据结构),并重新生成您之前使用过的随机数/图像吗?如果它是一个Web应用程序,您可能还希望将它存储在ViewState或SessionState中,以便它可以在用户之间保持唯一,并且可以自行重置。

答案 2 :(得分:0)

您的代码格式不正确并且不太清楚您想要什么,但如果您的实际问题是“如何生成两个独特的随机数字?”,请尝试以下方法:

var random = new Random();

int number1 = random.Next(0, RL + 1);
int number2 = number1;

while (number2 == number1)
{
    number2 = random.Next(0, RL + 1);
}

如果您不想显示下次显示的任何两张图像,请参阅Luaan的评论或Drew的回答。