文章目录
目录
前言
生成指定范围内的随机数
这个是最常用的技术之一。程序员希望通过随机数的方式来处理众多的业务逻辑,测试过程中也希望通过随机数的方式生成包含大量数字的测试用例。问题往往类似于:
如何随机生成 1~100 之间的随机数,取值包含边界值 1 和 100。
或者是:
如何随机生成随机的3位整数?
等等……
以 Java 语言为例,我们观察其 Random 对象的 nextInt(int) 方法,发现这个方法将生成 0 ~ 参数之间随机取值的整数。例如(假设先有 Random rand = newRandom();,下同):
rand.nextInt(100);
这行代码将生成范围0~100 之间的随机数,有趣的是,取值可能为 0 ,但不可能为 100。我们用中学数学课学习的区间表示法,表示为:[0, 100)。
那么如果要获得区间 [1~100]的随机数,该怎么办呢?稍微动动脑筋就可以想到:区间 [0, 100) 内的整数,实际上就是区间 [0, 99]。因为最大边界为100,可惜不能等于100,因此最大可能产生的“整数”就是99。
既然rand.nextInt(100) 获得的值是区间 [0, 99],那么在这个区间左右各加 1,就得到了区间 [1, 100]。因此,代码写成:
rand.nextInt(100)+ 1;
一、随机数是什么?
在Java编程里随机产生一个数,这个是不固定的,可以是不同类型的的数据
二、随机数使用
1.实例化随机数对象
Random r= new Random();
通用公式 int a = r.next_数据类型(a)+b (从b(是负数)开始到a-b=1结束)
//产生有范围的随机数1-10(1就是从1开始,最高位10-1+1)
int b = r.nextInt(10)+1;
//三位数随机数(100意思是从100开始,最高位 900++100-1)
int c = r.nextInt(900)+100;//100是开始位置 ,结束值是(900+100)
public static void main(String[] args){
//实例化随机数对象
Random r= new Random();
//产生一个随机数
int a = r.nextInt();//
System.out.println("a="+a);
//产生有范围的随机数1-10
int b = r.nextInt(10)+1;
System.out.println("1-10的随机数:" +b);
//三位数随机数
int c = r.nextInt(900)+100;
System.out.println("三位数随机数:"+c);
//产生小数随机数
float f= r.nextFloat();
System.out.println("小数随机数:" +f);
//产生一个保留两位小数的1-10的随机小数
DecimalFormat df = new DecimalFormat(".##");//数据格式化df.format(数据)
double d = r.nextInt(9)+1 + Math.round(r.nextFloat()*100)*1.0/100;
System.out.println("1-10d的随机数:" +d);
double g=5;
System.out.println(""+g);
}
2.运行结果
总结
当随机数发生器就是Random对象产生以后,可以通过对象调用不同的方法nextInt()、nextLong()、nextFloat()、nextDouble()等来获得不同类型的随机数。 如果2个Random对象使用相同的种子(比如都是100),并且以相同的顺序调用相同的函数,那么它们的返回值完全相同。