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

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

一、前言


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


二、随机数生成


  对于随机数的生成,分为四种情况,假设两个数为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

三、总结


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

目录
相关文章
|
6月前
|
存储 算法 Python
Python算法界的秘密武器:分治法巧解难题,贪心算法快速决策,动态规划优化未来!
【7月更文挑战第9天】Python中的分治、贪心和动态规划是三大关键算法。分治法将大问题分解为小问题求解,如归并排序;贪心算法每步选局部最优解,不保证全局最优,如找零钱;动态规划存储子问题解求全局最优,如斐波那契数列。选择合适算法能提升编程效率。
76 1
|
7月前
|
机器学习/深度学习 人工智能 算法
技术经验解读:【转】完美洗牌算法学习
技术经验解读:【转】完美洗牌算法学习
44 0
|
8月前
|
存储 算法 Python
学习编程是一个逐步积累的过程
【4月更文挑战第30天】学习编程是一个逐步积累的过程
56 2
|
算法 安全 数据安全/隐私保护
高效的随机数生成算法
在计算机科学和统计学中,随机数生成是一个重要的问题。随机数在许多领域广泛应用,包括密码学、模拟、游戏开发等。然而,生成高质量的随机数并不是一件容易的事情。本文将介绍一种高效的随机数生成算法——**梅森旋转算法(Mersenne Twister)**。
426 1
|
存储 自然语言处理 算法
算法学习 | 从无到有,我为什么要学算法
开启算法学习之旅,对我来说,这是从无到有的过程,让我改变了原本对算法爱恨交织的态度,真是一个好的开始。
130 1
|
机器学习/深度学习 人工智能 算法
强化学习从基础到进阶-常见问题和面试必知必答[2]:马尔科夫决策、贝尔曼方程、动态规划、策略价值迭代
强化学习从基础到进阶-常见问题和面试必知必答[2]:马尔科夫决策、贝尔曼方程、动态规划、策略价值迭代
|
算法 安全
当我们谈论算法我们在谈论什么:由疫情核酸检测想到的分治算法(Divide-and-Conquer)
解释一下病毒核酸检测的原理,检测人员提取小区居民的鼻腔拭子或者咽拭子(就是用一根棉签在咽喉处或者鼻腔深处刮取一些分泌物),然后将该棉签放入试剂盒,以病毒独特的基因序列检测靶标,通过PCR扩增,使我们选择的这段靶标DNA序列指数级增加,每一个扩增出来的DNA序列,都可与我们预先加入的一段荧光标记探针结合,产生荧光信号,扩增出来的靶基因越多,累计的荧光信号就越强。说白了就是试剂盒荧光反映变色越强烈,说明病毒体量和活性越强。
当我们谈论算法我们在谈论什么:由疫情核酸检测想到的分治算法(Divide-and-Conquer)
|
Java
java核心技术卷I中的细节(2- 大数)
java核心技术卷I中的细节(2- 大数)
127 0
java核心技术卷I中的细节(2- 大数)
|
算法 搜索推荐 程序员
算法的本质是什么?程序员如何学好算法?
所谓算法,指的是解决实际问题的一系列方法。 很多人以为,算法是一个新词汇,只和计算机有关系。 其实,算法的历史非常悠久,跟人类的生产生活有着密切的关系。
303 0
算法的本质是什么?程序员如何学好算法?
|
Java
实战小技巧17:随机数生成怎么选
随机数生成,java中有一个专门的Random类来实现,除此之外,使用Math.random的也比较多,接下来我们简单学习下,随机数的使用姿势
360 0

热门文章

最新文章