已有57人关注
5.1节拓展训练二中随机抽取四张牌,random的用法质疑
发表在C#图书答疑 2018-12-12 悬赏:1 学分 《零基础学C#》第5 章 数组—批量数据处理 118页-118页
是否精华
版块置顶:

先说问题,相关代码请参下面复制部分:

运行原程序时会发现只有抽到的第一张牌和另外一张未抽取的牌会随机变化,其他牌均没有变化,也就说所有的牌并未能打乱。实际做了一个数组用来记录random每次循环时值的变化情况,发现52次循环均为同一值。这样的话

  1. 52次循环生成的随机数都是一样的,网上说是因为在高并发的情况下,Random类所取到的系统时钟种子接近甚至完全一样所以会生成相同的随机数。那么我要是想生成不同的随机数是不是就不能用random了?              

  2. 打乱牌的过程是两张牌数据交换的过程,那么如何保证52次循环里random不出现重复的值,这个程序里似乎保证不了这点。

            // 随机打乱牌

            //运行多次发现打乱的效果不行,2、3、4……张总是相同的牌

            for (int i = 0; i < cardsnumber.Length; i++)

            {

                int random = new Random().Next(0,cardsnumber.Length);

                    list[i] = random; 

                int temp = cardsnumber[i];

                cardsnumber[i] = cardsnumber[random];

                cardsnumber[random] = temp;

            }


分享到:
精彩评论 2
小禾斗
学分:7338 LV13
TA的每日心情
奋斗
2017-04-21 14:00:25
2018-12-13
沙发

改成:int random = new Random(Guid.NewGuid().GetHashCode()).Next(0,cardsnumber.Length);

书上主要体现Random随机数的用法,没有深入讲,有特殊需求,得了解基础之后,自己深入研究。

njauzhen
学分:11 LV2
2018-12-15
板凳

小禾斗 发表于2018-12-13 11:27

改成:int random = new Random(Guid.NewGuid().GetHashCode()).Next(0,cardsnumber.Length);

书上主要体现Random随机数的用法,没有深入讲,有特殊需求,得了解基础之后,自己深入研究。

哈希数。

那如何避免52次的随机数重复呢?因为一但出现重复的随机数还是会对打乱牌出现影响的。谢谢!

首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照