本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>
提问:如何在Java中生成特定范围内的随机整数?
如何生成int特定范围内的随机值?
我已经尝试了以下方法,但是这些方法不起作用:
尝试1:
randomNum = minimum + (int)(Math.random() * maximum);
复制代码
错误:randomNum可以大于maximum。
尝试2:
Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum = minimum + i;
复制代码
错误:randomNum可以小于minimum。
热门回答:
在Java 1.7或更高版本中,执行此操作的标准方法如下:
import java.util.concurrent.ThreadLocalRandom;
// nextInt方法通常不包括最大值,
// 所以通过加1的方法,使结果集包含最大值
int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1);
复制代码
这种方法的优点是不需要显式初始化java.util.Random实例,如果使用不当,可能会出现问题。
但是,没有办法显式的设置参数min,max。因此,在需要设置参数的用户场景的情况下(例如,测试或者保存游戏状态的情况),可以使用Java 1.7以前的实现这类问题的标准化方法。
import java.util.Random;
public static int randInt(int min, int max) {
// 特别注意下:这个原文写的不是很能让人理解,他用注释代替了代码本身,所以他没有初始化rand,我在这里更改了下
Random rand = new Random();
// 该作者有意的写的没有很标准,所以想通过ctrl cv解决问题的同学们
// 需要考虑如何初始化rand。具体如何初始化并不在问题的主要考虑范围内(要分清主要矛盾和次要矛盾)
// 只要注意不要像本人一样直接默认seed就好,这样会使结果不够随机
// 通过一些参数可以让rand只需初始化一次并能够多次使用
// 或者使用ThreadLocalRandom(java 1.7及以后版本)
// nextInt方法通常不包括最大值,
// 所以通过加1的方法,使结果集包含最大值
int randomNum = rand.nextInt((max - min) + 1) + min;
return randomNum;
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END