zoukankan      html  css  js  c++  java
  • 【知识积累】随机数生成的几种方法

    一、前言

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

    二、随机数生成

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

      运行结果 

    59
    49
    57
    45
    View Code

      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));
        }
    }
    View Code

      运行结果  

    76
    63
    66
    93
    View Code

      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));
        }
    }
    View Code

      运行结果

    65
    25
    62
    62
    View Code

    三、总结

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

  • 相关阅读:
    [Unity热更新]LuaFramework08.修改加载方式
    [Unity热更新]LuaFramework07.lua逻辑
    [Unity热更新]LuaFramework06.更新资源
    [Unity热更新]LuaFramework05.MonoBehaviour(lua版本)
    [Unity热更新]LuaFramework04.UI界面
    [Unity热更新]05.AssetBundleBrowser
    大数据学习day10-----zookeeper--------1.小文件合并,2 输入和输出 3 多路径输出 4.zookeeper(选举机制,安装,zk的shell客户端、java客户端)
    大数据学习day09----hadoop--day06-------1.MR程序在yarn上运行的基本流程 2. 数据倾斜解决方案 3.高效topN(指定分区器,分组规则,自定义排序规则)
    大数据学习-----day08-----hadoop05-------0.补充(查询源代码的操作)1.MR程序数据处理全流程 2.yarn 3. merger案例(小文件合并)4.数据倾斜 5join案例
    大数据学习day7------hadoop04----1 流量案例 2 电影案例(统计每部电影的均分,统计每个人的均分,统计电影的评论次数,***统计每部电影评分最高的N条记录(Integer.max),统计评论次数最多的n部电影(全局排序)) 3 line线段重叠次数案例 4.索引案例
  • 原文地址:https://www.cnblogs.com/leesf456/p/5338666.html
Copyright © 2011-2022 走看看