关闭

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

538人阅读 评论(0) 收藏 举报
分类:

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2106次
    • 积分:118
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档