关于JAVA中的Random()获取随机数

来源:互联网 发布:java string 的split 编辑:程序博客网 时间:2024/05/29 14:32

Random是JAVA中的一个随机函数

JAVA中存在两种Random函数:
一、java.lang.Math.Random;
在Math类中的Random()方法用于产生随机数,这个方法默认生成>=0.0&&<=1.0的double型随机数,但只要在语句上稍加处理就可以就可以产生任意范围的随机数。

def s = Math.random();        println "${s}"

输出结果为:0.020479468916103527。是一个double类型的数字且在0-1之间。
但如果稍微做一下修改,就可以获得int类型的任何范围的数字:

def s = 1 + (int)((Math.random())*3);        println "${s}"

输出结果为:3。

二、java.util.Random;
java.util.Random的使用应该注意一下几点,这几点一般人都不会知道:
1、java.util.Random类中实现的随机算法是伪随机,也就是有规则的随机,所谓有规则的就是在给定种(seed)的区间内随机生成数字;
2、相同种子数的Random对象,相同次数生成的随机数字是完全相同的;
3、Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率均等;

在这里先说明Random()的各种方法:
1.获得随机数:

        Random random = new Random();        def s = random.nextInt()        println "${s}"

得出结果为:331741667。这种默认方法是得到以系统当前时间作为随机数的生成器的种子。

Random random = new Random();        def s = random.nextInt(10)        println "${s}"

得出结果为:8。得到一个0-9的随机整数。
2.获得随机字符串:

        String base = "1234567890";        Random random = new Random();        StringBuffer sb = new StringBuffer();        for(i in 0..6)        {            int number = random.nextInt(base.length());            sb.append(base.charAt(number));        }        println "${sb}";

得出的结果为:7162820。获得一个随机7位的字符串。

最后再来简单对比一下这两个随机函数到底的特点:
1.java.Math.Random()实际是在内部调用java.util.Random()的,它有一个致命的弱点,它和系统时间有关,也就是说相隔时间很短的两个random比如:
double a = Math.random();
double b = Math.random();
即有可能会得到两个一模一样的double。
2.java.util.Random()在调用的时候可以实现和java.Math.Random()一样的功能,而且他具有很多的调用方法,相对来说比较灵活。所以从总体来看,使用java.util.Random()会相对来说比较灵活一些。

0 0
原创粉丝点击