【问题标题】:Prevent duplicates in random number with button c#使用按钮 c# 防止随机数中的重复项
【发布时间】:2013-12-06 13:32:12
【问题描述】:

我的应用程序是用 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-- ;

【问题讨论】:

  • 基本上有两种方法 - 您可以跟踪您已经去过的图像,或者您可以随机排序索引数组,并按顺序使用它们。
  • 主要是我有 10 张图片,用户可以按第 10 次,然后单击一下,两张图片将出现并且都存储在一个索引中,要点我只希望随机数在第 10 次按下时唯一出现

标签: c# arrays random


【解决方案1】:

正如 luaan 在 cmets 中建议的那样,您可以做的最好的事情是您可以简单地洗牌一个数组。 将您的图像(或对它们的引用)放在一个数组/列表中,并使用我从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;
}

一旦你打乱了数组,只需循环遍历它,数组中的每个图像都会以随机方式显示一次。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您的代码格式不正确,也不清楚您想要什么,但如果您的实际问题是“如何生成两个唯一的随机数?”,请尝试以下操作:

      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 的回答。

      【讨论】:

        猜你喜欢
        • 2017-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-25
        • 2014-01-01
        • 2011-07-02
        • 1970-01-01
        • 2017-02-07
        相关资源
        最近更新 更多