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

 

转载于:https://www.cnblogs.com/zktww/p/8484656.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值