java随机数
在Java中我们可以使用Java.util.Random 类来产生一个随机数发生器。它有两种形式的构造函数,分别是Random()和Random(long seed)。Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,Random(long seed)使用指定的seed作为发生器的种子。
随机数发生器(Random)对象产生以后,通过调用不同的method:nextInt()、nextLong()、nextFloat()、nextDouble()等获得不同类型随机数。
1>生成随机数
Random random = new Random();
Random random = new Random(100);//指定种子数100
random调用不同的方法,获得随机数。
如果2个Random对象使用相同的种子(比如都是100),并且以相同的顺序调用相同的函数,那它们返回值完全相同。如下面代码中两个Random对象的输出完全相同
import java.util.*;
class TestRandom {
public static void main(String[] args) {
Random random1 = new Random(100);
System.out.println(random1.nextInt());
System.out.println(random1.nextFloat());
System.out.println(random1.nextBoolean());
Random random2 = new Random(100);
System.out.println(random2.nextInt());
System.out.println(random2.nextFloat());
System.out.println(random2.nextBoolean());
}
}
2>指定范围内的随机数
随机数控制在某个范围内,使用模数运算符%
import java.util.*;
class TestRandom {
public static void main(String[] args) {
Random random = new Random();
for(int i = 0; i < 10;i++) {
System.out.println(Math.abs(random.nextInt())%10);
}
}
}
获得的随机数有正有负的,用Math.abs使获取数据范围为非负数
3>获取指定范围内的不重复随机数
import java.util.*;
class TestRandom {
public static void main(String[] args) {
int[] intRet = new int[6];
int intRd = 0; // 存放随机数
int count = 0; // 记录生成的随机数个数
int flag = 0; // 是否已经生成过标志
while (count < 6) {
Random rdm = new Random(System.currentTimeMillis());
intRd = Math.abs(rdm.nextInt()) % 32 + 1;
for (int i = 0; i < count; i++) {
if (intRet[i] == intRd) {
flag = 1;
break;
} else {
flag = 0;
}
}
if (flag == 0) {
intRet[count] = intRd;
count++;
}
}
for (int t = 0; t < 6; t++) {
System.out.println(t + "->" + intRet[t]);
}
}
}
4>随即生成N位数
public class RandomNumber {
public static void main(String[] args) {
System.out.println("随机生成4位数:"+String.valueOf(Math.round(Math.random()*10000)));
System.out.println("随机生成5位数:"+String.valueOf(Math.round(Math.random()*100000)));
System.out.println("随机生成6位数:"+String.valueOf(Math.round(Math.random()*1000000)));
}
}