zoukankan      html  css  js  c++  java
  • Java随机数使用

    JAVA取随机数的三种方式:

    1. Math.random()
    2. System.currentTimeMillis()
    3. random.nextInt()

      废话不多说,看代码:

     1 /**
     2      *取单个随机数
     3      *Math.random()取10~100之间随机数
     4      *Math.round()进行向上取整处理=>{3.5=>4}、{-3.5=>-3}
     5      *
     6      **/
     7     @Test
     8     public void test1(){
     9         int max=100;
    10         int min=10;
    11         int randomNumber = (int) Math.round(Math.random()*(max-min)+min); 
    12         System.out.println("10~100之间随机数:"+randomNumber);
    13     }
    14     /**
    15      * 取单个随机数
    16      * System.currentTimeMillis()返回从1970年1月1号0点0分0秒到目前的一个long型的毫秒数
    17      * 通过取模,限制随机数范围
    18      * */
    19     @Test
    20     public void test2(){
    21         int max=100;
    22         int min=10;
    23         long randomNum = System.currentTimeMillis();
    24         int randomNumber = (int)(randomNum%(max-min))+min;
    25         System.out.println("10~100之间随机数:"+randomNumber);
    26     }
    27     /**
    28      * 取单个随机数
    29      * Random是一个随机数发生器
    30      * 有两种构造函数:Random()使用当前时间即System.currentTimeMillis()作为发生器的种子
    31      * Random(long seed)使用指定的seed作为发生器的种子
    32      * 再通过nextInt()、 nextLong()、nextFloat()、nextDouble()等获得不同类型随机数
    33      * */
    34     @Test
    35     public void test3(){
    36         int max=100;
    37         int min=10;
    38         Random random = new Random();  
    39         int randomNumber =  random.nextInt(max)%(max-min+1) + min;  
    40         System.out.println("10~100之间随机数:"+randomNumber);
    41     }
    View Code

    JAVA取N个随机数的三种方法:

    1. 双重循环去重法
    2. HashSet
    3. 排除已随机的数法
     1 /**
     2      * 取N个不同的随机数
     3      * 1.双重循环去重法
     4      * 进过第一重循环取值,另一重进行比较,去重
     5      * */
     6     public int[] randomCommon1(int min ,int max , int n){
     7         int[] result = new int[n]; 
     8         if(n>max-min+1||min>max){
     9             return null;
    10         }
    11         int count = 0;//记录数量
    12         while(count<n){
    13             int randomNumber = (int) Math.round(Math.random()*(max-min)+min);
    14             boolean falg = true;
    15             for(int i=0;i<n;i++){
    16                 if(randomNumber == result[i]){
    17                     falg = false;
    18                     break;
    19                 }
    20             }
    21             if(falg){
    22                 result[count] = randomNumber;
    23                 count++;
    24             }
    25         }
    26         return result;
    27     }
    28     /**
    29      * 取N个不同的随机数
    30      * 2.HashSet
    31      * 使用HashSet只允许存放不同值原理
    32      * */
    33     public void randomCommon2(int min,int max,int n,HashSet<Integer> set){
    34         if(n>max-min+1||min>max){
    35             return;
    36         }
    37         int randomNumber = (int) Math.round(Math.random()*(max-min)+min);
    38         set.add(randomNumber);
    39         if(set.size()<n){
    40             randomCommon2(min,max,n,set);//递归
    41         }
    42     }
    43     /**
    44      * 取N个不同的随机数
    45      * 3.排除已随机的数
    46      * */
    47     public static int[] randomArray(int min,int max,int n){  
    48         int len = max-min+1;  
    49           
    50         if(max < min || n > len){  
    51             return null;  
    52         }  
    53           
    54         //初始化给定范围的待选数组  
    55         int[] source = new int[len];  
    56            for (int i = min; i < min+len; i++){  
    57             source[i-min] = i;  
    58            }  
    59              
    60            int[] result = new int[n];  
    61            Random rd = new Random();  
    62            int index = 0;  
    63            for (int i = 0; i < result.length; i++) {  
    64             //待选数组0到(len-2)随机一个下标  
    65                index = Math.abs(rd.nextInt() % len); 
    66                len--;//始终保持取值范围缩小,并保持替换值在改变
    67                //将随机到的数放入结果集  
    68                result[i] = source[index];  
    69                //将待选数组中被随机到的数,用待选数组(len-1)下标对应的数替换  
    70                source[index] = source[len];  
    71            }  
    72            return result;  
    73     }  
    74 
    75     @Test
    76     public void Test(){
    77         //方法1:
    78         int[] result1 = randomCommon1(0,10,5);
    79         for(int i:result1){
    80             System.out.print(i+"#");
    81         }
    82         System.out.println();
    83         //方法2:
    84         HashSet<Integer> set = new HashSet<Integer>();
    85         randomCommon2(0,10,5,set);
    86         for(int i:set){
    87             System.out.print(i+"#");
    88         }
    89         System.out.println();
    90         //方法3:
    91         int[] result3=randomArray(0,10,5);
    92         for(int i:result3){
    93             System.out.print(i+"#");
    94         }
    95     }
    View Code

    结果:

    1 9#6#4#3#10#
    2 1#4#8#9#10#
    3 10#9#4#0#5#
    View Code
  • 相关阅读:
    2019 苏宁控股java面试笔试题 (含面试题解析)
    2019 58同城java面试笔试题 (含面试题解析)
    2019 搜狐java面试笔试题 (含面试题解析)
    2019 拼多多java面试笔试题 (含面试题解析)
    2019 新浪 java面试笔试题 (含面试题解析)
    doubango(2)--底层协议栈结构分析
    doubango(1)--从协议栈结构说起
    doubango简介
    WebRTC VoiceEngine使用简单Demo
    WebRTC音视频引擎研究(2)--VoiceEngine音频编解码器数据结构以及参数设置
  • 原文地址:https://www.cnblogs.com/zktww/p/8484656.html
Copyright © 2011-2022 走看看