C# 生成随机数的问题出现了重复值,分少以后补上谢谢谢谢!
代码解释:连连看游戏中的图片都是成对的,所以循环总数/2次,每次随机取两个picturebox的索引,在循环外创建索引的随机对象,为什么还会重复呢?一共128个模块,可是...
代码解释:
连连看游戏中的图片都是成对的,所以循环 总数/2 次,每次随机取两个picturebox的索引,在循环外创建索引的随机对象,为什么还会重复呢? 一共128个模块,可是随机出来好多重复值,求解答 展开
连连看游戏中的图片都是成对的,所以循环 总数/2 次,每次随机取两个picturebox的索引,在循环外创建索引的随机对象,为什么还会重复呢? 一共128个模块,可是随机出来好多重复值,求解答 展开
展开全部
算法错了,建个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,这样已经取过的图片索引就不会再次取到了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询