常用的java产生整型随机数的方法有三种:
Math.random() Random.nextint() Random.nextint(int)
基本功能:
第一个产生0(包括)到1(不包括)之间的一个double类型的随机数。
第二个是产生一个没有限制的随机整数(可能为负)
第三个是产生一个0(包括)到指定整数(不包括)之间的一个随机正整数
使用方法:
第一个一般是Math.random()*int a 来拿到0到 a-1 (都包括)范围的随机数,如果是Math.random()*int a+int b 拿到的就是b到a+b-1(都包括)范围的随机数。
第二个一般是在 Random.nextint()后取余,若想取得正的随机数,配合结果取绝对值的写法为:Math.abs(random.nextInt())%(int a) 这样拿到的就是0到a(不包括)之间的整数。
第三个使用较为方便,可以直接取到指定区间(不包括参数)的随机数。若想不从零开始则加上指定int型。
总结:以上生成随机数的方法不管是使用的方便程度和效率,第三种方法都占有优势。原因是它们底层都要调用Random.next()方法,但Math.random()调用了两次,而Random.nextint()调用不会多于两次。
升级版:
如何产生不重复的随机数?
最容易想到的方法就是去重了,比较剔除之前已经出现的随机数。
具体代码如下:
Random random = new Random();
int a[] = new int[4];
a[0] = random.nextInt(10);
for (int i = 1; i < a.length; i++) {
a[i] = random.nextInt(10);
for (int j = 0; j < i; j++) {
if (a[i] == a[j]) {
i--;
}
}
}
以上代码就产生4个0到10(不包括)之间的不重复的随机数。
注意:一定要注意随机的数的范围要大于取值的个数,否则程序会进入死循环。