初识Java(Java数字处理类-随机数)

一、随机数

    在实际开发中产生随机数的使用普遍存在,所以在程序中进行产生随机数操作很重要。在 Java 中主要提供了两种方式产生随机数,分别为调用 Math 类的 random() 方法和 Random 类提供的产生各种数据类型随机数的方法。    

    1.1  Math.random()  方法 

    在 Math 类中存在一个 random 方法,用于产生随机数字,这个方法默认生成大于等于 0.0 小于1.0 的 double 型随机数,即 0 <= Math.random() < 1.0 ,虽然 Math.random() 方法只可以产生 0 ~ 1 之间的 double 型数字,其实只要在 Math.random() 语句上稍加处理,就可以使用这个方法产生任意范围的随机数。

(int)(Math.Random() * n)           返回大于等于 0 小于 n 的随机数
m + (int)(Math.Random()  *n)       返回大于等于 m 小于 m+n (不包括 m+n )的随机数

    eg :创建类,在类中编写 GetEvenNum() 方法产生两数之间的随机数,并在主方法中输出这个随机数。

public class MathRandom {
    /**
     * 定义产生偶数的方法
     * @param num1 起始范围参数
     * @param num2 终止范围参数
     * @return 随机的范围内偶数
     */
    public static int GetEvenNum(double num1 , double num2) {
        //产生 num1 ~ num2 之间的随机数
        int s = (int)num1 + (int)(Math.random() * (num2-num1));
        if(s%2 == 0) {                                                  //判断随机数是否为偶数
        	return s;                                               //返回
        }else {                                                         //结果为奇数
        	return s + 1;                                           //将结果+1返回
        }
    }
    public static void main(String[] args) {
        //调用产生随机数方法
        System.out.println("任意一个 2 ~ 32 之间的偶数:"+GetEvenNum(2, 32));
    }
}

    运行结果为 : 

任意一个 2 ~ 32 之间的偶数:6

    每次运行大的结果都不相同,这就实现了随机产生数据的功能,病区每次产生的值都是偶数。为了实现这个功能,这里定义了一个方法 GetEvenNum() ,该方法的残花分别为产生随机数字的上限与下限。因为 m+(int)(Math.random()*n) 语句可以获取 m ~ m+n 之间的随机数,所以 “ 2+(int)(Math.random()*(32-2)) ” ,这个表达式就可以求出 2~32 之间的随机数。当获取到这个区间的随机数以后需要判断这个数字是否为偶数时,对该数字做对2取余操作即可。如果该数为奇数,则将该奇数+1 后返回也可得到偶数。

    使用 Math 类的 random() 方法也可以随机生成字符,可以使用如下代码生成 a~z 之间的字符 

(char)('a' + Math.random()*('z' - 'a' + a));

    通过上述表达式可以求出更多的随机字符,如 A ~ Z 之间的随机字符,进而推理出任意两个字符之间的随机字符,可以使用一下语句表示 :

(char)(char1 + Math.random()*(char2 - char1 + 1));

     eg : 创建类,在类中编写 GetReandomChar() 方法产生随机字符,并在主方法中输出该字符。

public class MathRandomChar {
    //定义获取任意字符之间的随机字符
    public static char GetRandomChar(char char1, char char2) {
        return (char)(char1 + Math.random()*(char2 - char1 + 1));
    }
    public static void main(String[] args) {
        //获取 a~z 之间的随机字符
        System.out.println("任意小写字符:" + GetRandomChar('a', 'z'));
        //获取 A~Z 之间的随机字符
        System.out.println("任意大写字符:" + GetRandomChar('A', 'Z'));
        //获取 0~9 之间的随机字符
        System.out.println("0 到 9 任意数字字符:" + GetRandomChar('0', '9'));
    }
}

    运行结果为 :

任意小写字符:l
任意大写字符:P
0 到 9 任意数字字符:1

    random() 方法返回的值实际上是伪随机数,它通过复杂的运算而得到一系列的数。该方法时通过当前时间作为随机数生成器的参数,所以每次执行程序都会产生不同的随机数。

    1.2  Random  类

    除了 Math 类中的 random() 方法可以获取随机数之外, Java 中还提供了一种可以获取随机数的方式,那就是 java.util.Random 类。可以通过实例化一个 Random 对象创建一个随机数生成器。

    语法如下 :

Random r = new Random(); 

    其中 : r    是指 Random 对象。

    以这种方式实例化对象时, Java 编译器以系统当前时间作为随机数生成器的种子,因为每时每刻的时间不可能相同,所以产生的随机数将不同,但是如果运行速度太快,也会产生两次运行结果相同的随机数。

    同时也可以在实例化 Random 对象时,设置随机数生成器的种子。

    语法如下 :

Random r = new Random(seedValue);
    r  : Random 类对象

    seedValue  :随机数生成器的种子

    在 Random 类中提供了获取各种数据类型随机数的方法,下面列举几个常用的方法:

public int nextInt() :             返回一个随机整数
public int nextInt(int n) :        返回大于等于 0 小于 n 的随机整数
public long nextLong() :           返回一个随机长整型值
public boolean nextBoolean() :     返回一个随机布尔型值
public float nextFloat() :         返回一个随机浮点型值
public double nextDouble() :       返回一个随机双精度型值
public double nexGaussian() :      返回一个概率密度为高斯分布的双精度值

    eg : 创建类,在累的主方法中创建 Random 的对象,使用该对象生成各种类型的随机数,并输出结果。

import java.util.Random;                                               //导包
public class RandomDemo {
public static void main(String[] args) {
Random random = new Random();                                          //实例化一个 Random 类
System.out.println("随机产生一个整数:" + random.nextInt());
System.out.println("随机产生一个大于等于 0 小于 10 的整数:" + random.nextInt(10));
System.out.println("随机产生一个布尔型值:" + random.nextBoolean());
System.out.println("随机产生一个双精度型的值:" + random.nextDouble());
System.out.println("随机产生一个浮点型的值:" + random.nextFloat());
System.out.println("随机产生一个概率密度为高斯分布的双精度值:" + random.nextGaussian());
}
}

    运行结果为:

随机产生一个大于等于 0 小于 10 的整数:5
随机产生一个布尔型值:false
随机产生一个双精度型的值:0.4923202923804435
随机产生一个浮点型的值:0.6521005
随机产生一个概率密度为高斯分布的双精度值:-0.2458356560206751




猜你喜欢

转载自blog.csdn.net/js940814/article/details/80200111