Dart编写生成非零随机数的for循环仍输出0的问题求助
代码错误原因
Random.nextInt(int max)方法的返回值范围为 0 ≤ 结果 < max,天生包含0:你循环第一次执行时i=1,nextInt(1)只能返回0;最后一次循环i=6,nextInt(6)的返回值范围是0-5,依然包含0,自然会拿到0结果。- 你在循环内反复实例化
Random对象属于多余操作,重复初始化会降低随机数的分布均匀性,全局初始化一次即可。 - 整个for循环逻辑无效:循环过程中前面的赋值结果都会被最后一次的结果覆盖,你最终拿到的永远是i=6那次的随机数结果,前面的循环完全没有作用。
- 代码中的打印语句存在拼写错误,
Randon应为Random。
正确实现方式
如果你要生成1-6之间的非零随机数,最简单的写法是直接给随机结果加1,跳过0值:
import 'dart:math'; void main() { final _random = Random(); // nextInt(6)返回0-5,加1后范围变为1-6,自然排除0 int num = _random.nextInt(6) + 1; print('Random num is $num'); }
如果是要适配更通用的、排除0的随机数生成场景,可以用do-while循环判断,生成0就重新取值:
import 'dart:math'; void main() { final _random = Random(); int num; do { num = _random.nextInt(6); } while(num == 0); print('Random num is $num'); }
内容的提问来源于stack exchange,提问作者abhijeet
相关产品推荐
相关产品推荐

