java中生成指定范围随机数的方法

这个是最常用的技术之一。程序员希望通过随机数的方式来处理众多的业务逻辑,测试过程中也希望通过随机数的方式生成包含大量数字的测试用例。问题往往类似于:

如何随机生成 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;
    }

你可能感兴趣的:(java)