【知识积累】随机数生成的几种方法

简介:   在我们平时写代码的时候,免不了会使用到随机数,特此将几种随机的生成总结如下。

一、前言


  在我们平时写代码的时候,免不了会使用到随机数,特此将几种随机的生成总结如下。


二、随机数生成


  对于随机数的生成,分为四种情况,假设两个数为min, max,则有如下四种情况。


  1. (min, max),表示生成的随机数不包括min和max。


  2. [min, max),表示生成的随机数包括min,但不包括max。


  3. (min, max],表示生成的随机数不包括min,但是包括max。


  4. [min, max],表示生成的随机数包min,也包括max。


  下面我们就上面的四种情况使用三种不同的方法实现。


  2.1 使用Math.random方法


  其代码如下  

package com.hust.grid.leesf.random;
/**
 * 使用Math.random方法生成随机数
 * @author LEESF
 * 2016.3.30
 */
public class RandomTest {
    //(min, max)
    public static int random1(int min, int max) {
        int ran;
        while ((ran = (int) (Math.random() * (max - min) + min)) == min);
        return ran;
    }
    //[min, max)
    public static int random2(int min, int max) {
        int ran = (int) (Math.random() * (max - min) + min);
        return ran;
    }
    // (min, max]
    public static int random3(int min, int max) {
        int ran;
        while ((ran = (int) (Math.random() * (max - min + 1) + min)) == min);
        return ran;
    }
    //[min, max] 
    public static int random4(int min, int max) {
        int ran = (int) (Math.random() * (max - min + 1) + min);
        return ran;
    }
    public static void main(String[] args) {
        int min = 40;
        int max = 100;
        // (min, max)
        System.out.println(random1(min, max));
        // [min, max)
        System.out.println(random2(min, max));
        // (min, max]
        System.out.println(random3(min, max));
        // [min, max]
        System.out.println(random4(min, max));
    }
}

 运行结果 

59
49
57
45

 2.2 使用Random对象的nextInt方法


  其代码如下 

package com.hust.grid.leesf.random;
import java.util.Random;
/**
 * 使用Random对象生成随机数
 * 
 * @author LEESF 2016.3.30
 */
public class RandomTest {
    // (min, max)
    public static int random1(int min, int max) {
        Random random = new Random();
        int seed = max - min;
        int ran;
        while ((ran = random.nextInt(seed) + min) == min)
            ;
        return ran;
    }
    // [min, max)
    public static int random2(int min, int max) {
        Random random = new Random();
        int seed = max - min;
        int ran = random.nextInt(seed) + min;
        return ran;
    }
    // (min, max]
    public static int random3(int min, int max) {
        Random random = new Random();
        int seed = max - min + 1;
        int ran;
        while ((ran = (int) (random.nextInt(seed) + min)) == min)
            ;
        return ran;
    }
    // [min, max]
    public static int random4(int min, int max) {
        Random random = new Random();
        int seed = max - min + 1;
        int ran = random.nextInt(seed) + min;
        return ran;
    }
    public static void main(String[] args) {
        int min = 40;
        int max = 100;
        // (min, max)
        System.out.println(random1(min, max));
        // [min, max)
        System.out.println(random2(min, max));
        // (min, max]
        System.out.println(random3(min, max));
        // [min, max]
        System.out.println(random4(min, max));
    }
}

 运行结果 

76
63
66
93

  2.3 使用System类的currentTimeMillis方法


  这种方式的随机数不是随机的,但是在不严格的情况可以使用,可以用作参考,代码如下

package com.hust.grid.leesf.random;
/**
 * 使用System类生成随机数
 * 
 * @author LEESF 2016.3.30
 */
public class RandomTest {
    // (min, max)
    public static int random1(int min, int max) {
        int random;
        while ((random = (int) (System.currentTimeMillis() % (max - min) + min)) == min)
            ;
        return random;
    }
    // [min, max)
    public static int random2(int min, int max) {
        long currentTime = System.currentTimeMillis();
        int random = (int) (currentTime % (max - min));
        return random;
    }
    // (min, max]
    public static int random3(int min, int max) {
        int random;
        while ((random = (int) (System.currentTimeMillis() % (max - min + 1) + min)) == min)
            ;
        return random;
    }
    // [min, max]
    public static int random4(int min, int max) {
        int random = (int) (System.currentTimeMillis() % (max - min + 1) + min);
        return random;
    }
    public static void main(String[] args) {
        int min = 40;
        int max = 100;
        // (min, max)
        System.out.println(random1(min, max));
        // [min, max)
        System.out.println(random2(min, max));
        // (min, max]
        System.out.println(random3(min, max));
        // [min, max]
        System.out.println(random4(min, max));
    }
}

运行结果

65
25
62
62

三、总结


  对随机数生成的几种方法进行了总结,在以后需要的时候直接可以使用,平时多进行积累。谢谢各位园友的观看~

目录
相关文章
|
3月前
|
机器学习/深度学习 人工智能 算法
技术经验解读:【转】完美洗牌算法学习
技术经验解读:【转】完美洗牌算法学习
22 0
|
11月前
|
算法 安全 数据安全/隐私保护
高效的随机数生成算法
在计算机科学和统计学中,随机数生成是一个重要的问题。随机数在许多领域广泛应用,包括密码学、模拟、游戏开发等。然而,生成高质量的随机数并不是一件容易的事情。本文将介绍一种高效的随机数生成算法——**梅森旋转算法(Mersenne Twister)**。
226 1
|
机器学习/深度学习 算法 数据可视化
深度学习如炼丹,你有哪些迷信做法?网友:Random seed=42结果好
深度学习如炼丹,你有哪些迷信做法?网友:Random seed=42结果好
|
PyTorch 算法框架/工具
Pytorch中设计随机数种子的必要性
Pytorch中设计随机数种子的必要性
252 0
Pytorch中设计随机数种子的必要性
|
算法 安全 PHP
【高级软件实习】蒙特卡洛模拟 | PRNG 伪随机数发生器 | LCG 线性同余算法 | 马特赛特旋转算法 | Python Random 模块
本篇博客将介绍经典的伪随机数生成算法,我们将 重点讲解 LCG(线性同余发生器) 算法与马特赛特旋转算法,在此基础上顺带介绍 Python 的 random 模块。 本篇博客还带有练习,无聊到喷水的练习,咳咳…… 学完前面的内容你就会了解到 Python 的 Random 模块的随机数生成的实现,是基于马特赛特旋转算法的,比如 random_uniform 函数。而本篇博客提供的练习会让你实现一个基于 LCG 算法的random_uniform,个人认为还是比较有意思的
535 0
【高级软件实习】蒙特卡洛模拟 | PRNG 伪随机数发生器 | LCG 线性同余算法 | 马特赛特旋转算法 | Python Random 模块
|
数据挖掘 开发者 Python
Numpy 数组导向编程 上|学习笔记
快速学习 Numpy 数组导向编程 上
Numpy 数组导向编程 上|学习笔记
|
Python
numpy方法积累
目录 1. numpy.percentile()的使用
56 0
|
存储 人工智能 算法
算法系统学习-正的麻烦反着来呗!(迭代算法-倒推法)
该系列是基于有一定语言基础(C,C++,Java等等)和基本的数据结构基础进行的算法学习专栏,如果觉得有点吃力 😥 ,建议先了解前提知识再学习喔!本个专栏会将用更容易理解的表达去学习算法,如果在一些表述上存在问题还请各位多多指点
168 0
|
存储 机器学习/深度学习 算法
K近邻算法哪家强?KDTree、Annoy、HNSW原理和使用方法介绍
K近邻算法哪家强?KDTree、Annoy、HNSW原理和使用方法介绍
|
Java
实战小技巧17:随机数生成怎么选
随机数生成,java中有一个专门的Random类来实现,除此之外,使用Math.random的也比较多,接下来我们简单学习下,随机数的使用姿势
309 0