C# 生成随机数的问题出现了重复值,分少以后补上谢谢谢谢!

代码解释:连连看游戏中的图片都是成对的,所以循环总数/2次,每次随机取两个picturebox的索引,在循环外创建索引的随机对象,为什么还会重复呢?一共128个模块,可是... 代码解释:
连连看游戏中的图片都是成对的,所以循环 总数/2 次,每次随机取两个picturebox的索引,在循环外创建索引的随机对象,为什么还会重复呢? 一共128个模块,可是随机出来好多重复值,求解答
展开
 我来答
aha_no_one
推荐于2016-08-02 · TA获得超过499个赞
知道小有建树答主
回答量:167
采纳率:0%
帮助的人:187万
展开全部

算法错了,建个list包含所有图片的索引,然后循环随机取list中的值,取过的值就删掉,这样就不会出现重复项

List<int> picIndexList = new List<int>();

for (int i = 0; i < picNum; ++i)
    picIndexList.Add(i);
    
while (picIndexList.Count > 0)
{
    Random rPbIndex = new Random(picIndexList.Count);
    pbIndex = rPbIndex.Next(0, picIndexList.Count); // 图片在 picIndexList 中的索引
    picIndex = picIndexList[pbIndex]; // 图片索引
    
    picIndexList.RemoveAt(pbIndex); // 删除 picIndexList 中的项
}
追问
上面的问题还是想不通,用你的方法是可以的,谢谢谢谢!
追答
因为 pbIndex = rPicIndex.Next(0, picNum); 这句是在 0 到 picNum 之间取随机数,无论你怎么循环,它一直取随机数,既然随机,当然可能会取到多个相同值,而我的做法是用图片方块索引建里一个 list,这个 list 的值就是 0 到 picNum,然后循环随机取 list 中的值,比如随机出一个 10,那么 list[10] 对应的 图片索引就是 10,然后我将 list[10]从 list 中删除,那么 list.Count 就是
picNum - 1, 如果再次随机到 10, 因为我删除了 list 中的第 10 个值,那么list[10] 其实等于 11,这样已经取过的图片索引就不会再次取到了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式