生成随机0/1输出时出现无限循环问题求助
为什么你的Math.random()相关代码会无限循环?
兄弟我太懂这种明明觉得自己逻辑没问题,但代码就是死循环的憋屈感了!刚学计算机的时候我也踩过类似的坑,结合你说的Math.random()的用法,咱们来捋捋最容易犯的几个错误:
1. 循环条件本身永远为true
这是新手最常踩的低级坑!比如你可能写了这样的代码:
while ((int)(Math.random() * 10) >= 0) { // 循环体内容 }
因为Math.random()返回的是[0.0, 1.0)之间的double,乘10后是[0.0, 10.0),强制转int后只会得到0到9之间的整数,永远满足>=0的条件,循环当然永远停不下来!
2. 没有在循环内重新生成随机值
比如你把随机值的生成写在了循环外面:
int num = (int)(Math.random() * 10); while (num != 5) { // 循环体里完全没更新num的值! System.out.println("还没抽到5..."); }
这里num只在循环开始前生成一次,如果第一次不是5,那循环条件永远是true,自然无限循环。你需要把随机值的生成放到循环体里,每次循环都重新生成:
while (true) { int num = (int)(Math.random() * 10); if (num == 5) { break; // 抽到5就退出循环 } System.out.println("还没抽到5..."); }
3. 极端概率情况(几乎不可能,但理论存在)
如果你的代码是类似“抽到某个特定数才退出”,比如:
while ((int)(Math.random() * 10) != 7) { // 循环内容 }
从概率上来说,虽然每次抽到7的概率是1/10,但每次随机都是独立事件,存在极小的概率一直抽不到7,导致循环一直跑下去。不过这种情况几乎不会在实际中遇到,大概率还是前面两种逻辑错误。
你可以再仔细检查下自己的代码:循环的终止条件是不是合理?每次循环有没有更新判断用的变量?有没有把某个永远成立的条件当成了终止判断?
内容的提问来源于stack exchange,提问作者Isildur01
相关产品推荐
相关产品推荐

