转载:JAVA生成给定范围内的不重复的随机数的几种方法

原作链接:http://blog.csdn.net/haiyoung/article/details/48085081

在java中的Math类中存在一个random()方法,该方法默认生成0.0到1.0之间的double型随机数;经过稍微处理,就可以产生我们需要的随机数以及随机字符。

除了Math类中的random()方法之外,java.util.Random类也可以用来生成随机数;下面分别举例(用不同的方法生成双色球号码)说明:

[java]  view plain  copy
  1. 1>Math.random()方法  
  2.   
  3. 生成随机数:  
  4.   
  5. package test;  
  6.   
  7. import java.util.SortedSet;  
  8. import java.util.TreeSet;  
  9.   
  10. public class MathRandom {  
  11.   
  12.     static SortedSet set = new TreeSet();  
  13.   
  14.     public static int randomSet(double m, double n) {  
  15.         int num = (int) m + (int) (Math.random() * (n - m));  
  16.         return num;  
  17.     }  
  18.   
  19.     public static void shuangSe(int num1, int num2) {  
  20.         for (int i = 0; i < num1; i++) {  
  21.             set.add(randomSet(133));  
  22.         }  
  23.         if (set.size() < num2) {  
  24.             shuangSe(num2 - set.size(), num2);  
  25.         }  
  26.     }  
  27.   
  28.     public static void main(String[] args) {  
  29.         shuangSe(66);  
  30.         System.out.print(set);  
  31.         System.out.println("   "+randomSet(1,16));  
  32.     }  
  33. }  
[java]  view plain  copy
  1. 运行结果(随机):  
  2. [31317212325]   2  

[java]  view plain  copy
  1. 生成随机字符:  
  2.   
  3. package test;  
  4.   
  5. public class MathRandomChar {  
  6.     public static char getRandomChar(char c1,char c2){  
  7.         return (char)(c1+Math.random()*(c2-c1+1));  
  8.          }  
  9.       
  10.     public static void main(String[] args) {  
  11.         System.out.println("a-z之间的任意字符:   "+getRandomChar('a','z'));  
  12.     }  
  13. }  
  14.   
  15. 运行结果(随机):a-z之间的任意字符:   g  

2>java.util.Random方法

[java]  view plain  copy
  1. 方法一:for循环加递归:  
  2.   
  3. package test;  
  4.   
  5. import java.util.Random;  
  6. import java.util.SortedSet;  
  7. import java.util.TreeSet;  
  8.   
  9. public class Test {  
  10.   
  11.     static Random ran = new Random();  
  12.     static SortedSet set = new TreeSet();  
  13.   
  14.     public static void randomSet(int n, int m) {  
  15.         for (int i = 0; i < n; i++) {  
  16.             set.add(ran.nextInt(33) + 1);  
  17.         }  
  18.         if (set.size() < m) {  
  19.             randomSet(m - set.size(), m);  
  20.         }  
  21.     }  
  22.   
  23.     public static void main(String[] args) {  
  24.         randomSet(66);  
  25.         System.out.print(set);  
  26.         System.out.println("  "+(ran.nextInt(16)+1));  
  27.     }  
  28. }  
  29.   
  30. 运行结果(随机):[11518293031]  13   

[java]  view plain  copy
  1. 方法二:while循环  
  2.   
  3. package test;  
  4. import java.util.Random;  
  5. import java.util.Set;  
  6. import java.util.TreeSet;  
  7.   
  8. public class ShuangSeQiu {  
  9.     public static void main(String[] args) {  
  10.         Random ran = new Random();  
  11.         Set<Integer> set = new TreeSet<>();  
  12.         while (true) {  
  13.             int a = ran.nextInt(33) + 1;  
  14.             set.add(a);  
  15.             if (set.size() > 5) {  
  16.                 System.out.print(set);  
  17.                 break;  
  18.             }  
  19.         }  
  20.         System.out.println("  "+(ran.nextInt(16)+1));  
  21.     }  
  22. }  
  23.   
  24. 运行结果(随机):[21112162326]  7  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值