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