经常使用的java产生整型随机数的方法有三种:java
Math.random() Random.nextint() Random.nextint(int)dom
基本功能:code
第一个产生0(包括)到1(不包括)之间的一个double类型的随机数。class
第二个是产生一个没有限制的随机整数(可能为负)效率
第三个是产生一个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(不包括)之间的不重复的随机数。
注意:必定要注意随机的数的范围要大于取值的个数,不然程序会进入死循环。