我正在使用一段代码片段来生成一个随机的 4 位代码。但不幸的是,我无法获得我想要的准确输出。
我正在使用这段代码片段:
import 'dart:math';
void _generateCode() {
Set<int> setOfInts = {};
setOfInts.add(Random().nextInt(9999));
for (var num in setOfInts) {
if (num.toString().length == 4) {
developer.log('Code: $num');
} else {
developer.log('Code: not a 4 digit code');
}
}
}
@override
void initState() {
super.initState();
_generateCode(); // for testing purposes only
}
该代码主要是生成一个 4 位随机代码,我认为我可以通过添加这个条件语句来实现它,
if (num.toString().length == 4) {
//fortunately, I could get what I want here
}
但问题是,根据日志上打印的内容(每次我执行热重载时):
218 毫秒内重新启动应用程序 。 [
日志] 代码:8308 221 毫秒 内重新启动应用程序。 [ 日志] 代码:6342 209 毫秒内重新启动应用程序。[日志] 代码:3404 208 毫秒内重新启动应用程序。 [日志] 代码:9468 246 毫秒内重新启动应用程序。 [ 日志] 代码:1101 127 毫秒内重新启动应用程序。 [日志] 代码:8230 133 毫秒内重新启动应用程序。 [日志] 代码:4104 220 毫秒 内重新启动应用程序。 [日志] 代码:6558 213 毫秒内重新启动应用程序。 [日志] 代码:不是 4 位代码 👈 这是它产生的问题的一部分 223 毫秒内重新启动应用程序。 [日志] 代码:6234
如果我删除了 else 语句:
if (num.toString().length == 4) {
developer.log('Code: $num');
} else {
developer.log('Code: not a 4 digit code');
}
我无法获得 4 位数的代码,我只是认为通过使用此语句if (num.toString().length == 4)
,可以确保生成 4 位数的代码,但事实并非如此。
我该如何解决它,以便不生成 3 位代码值?
如果我们看一下文档,
Random.nextInt
它说:因此,您
Random().nextInt(9999)
可以生成 0 到 9998 之间的任意数字(注意:不是 9999)。不能保证代码一定大于 999,也可能是 1、2 或 3 位数字。一个简单的解决方法是从 1,000 开始,然后向其中添加一个从 0 到 8999 的数字:
注意: 9000
nextInt
永远不会返回您传递的实际最大值。