如何生成特定范围内的随机 int
值?
以下方法存在与整数溢出相关的错误:
randomNum = minimum + (int)(Math.random() * maximum);
// Bug: `randomNum` can be bigger than `maximum`.
Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum = minimum + i;
// Bug: `randomNum` can be smaller than `minimum`.
原文由 user42155 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Java 1.7 或更高版本 中,执行此操作的标准方法如下:
请参阅 相关的 JavaDoc 。这种方法的优点是不需要显式初始化 java.util.Random 实例,如果使用不当,这可能会导致混淆和错误。
但是,相反,没有办法明确设置种子,因此在测试或保存游戏状态等有用的情况下很难重现结果。在那些情况下,可以使用下面所示的 Java 1.7 之前的技术。
在 Java 1.7 之前,标准的做法如下:
请参阅 相关的 JavaDoc 。实际上, java.util.Random 类通常优于 java.lang.Math.random() 。
特别是,当标准库中有一个简单的 API 来完成任务时,就没有必要重新发明随机整数生成轮。