这个是最常用的技术之一。程序员希望通过随机数的方式来处理众多的业务逻辑,测试过程中也希望通过随机数的方式生成包含大量数字的测试用例。问题往往类似于:
如何随机生成 1~100 之间的随机数,取值包含边界值 1 和 100。或者是:如何随机生成随机的3位整数?
这里提供三种方法:
1.使用Math类的random方法,这个方法返回的是一个0~1之间的double类型的小数
public class Demo1 {
public static void main(String[] args) {
double n =Math.random();
System.out.println(n);
}
}
如果我们将n*100 就可以得到一个一百以内的随机数。以此类推。
2.使用Random类
public class Demo1 {
public static void main(String[] args) {
Random r = new Random();
r.nextInt(); //返回一个随机整数
r.nextInt(10);//返回一个10以内的随机整数,不包括10
r.nextDouble(); //返回一个0~1之间的double类型的随机小数
}
}
如果想要生成一个指定范围的随机整数怎么办?
例如要生成一个区间为[123,456]之间的整数,给出
int n =r.nextInt(334) + 123;
其实这是基于一个公式 如果要取一个范围在[min,max]之间的随机整数那么公式如下
int randNumber =r.nextInt(max - min + 1) + min;
顺便一提,Random类在创建时是可以提供随机种子的
//两种构造方法:
Random r = new Random();//不包含随机种子
Random r = new Random(100);//包含随机种子
//如果使用相同的随机种子,相同次数得到的随机数字是相同的
如果没有提供种子数,Random实例的种子数将是当前时间的毫秒数,可以通过System.currentTimeMillis()来获得当前时间的毫秒数。这有
关下面说的第三种取随机数的方法。
3.在我们的System类中有一个currentTimeMillis()方法,这个方法返回一个从1970年1月1号0点0分0秒到目前的一个毫秒数,返回类型是long,是一个十三位的整数,我们可以拿它作为一个随机数,我们可以拿他对一些数取模,就可以把它限制在一个范围之内了
其实在Random的默认构造方法里也是使用上面方法进行随机数的产生的
例如 取0~100间的随机整数。
public static void main(String[] args) {
long l = System.currentTimeMillis();
long n = l%100;
int random = (int)n;
}