JAVA中生成指定位数随机数的方法总结
JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法。
方法一、通过Math类
1 public static String getRandom1(int len) { 2 int rs = (int) ((Math.random() * 9 + 1) * Math.pow(10, len - 1)); 3 return String.valueOf(rs); 4 }
该方法是通过Math.random()获取[0.0, 1.0)的随机数,再乘以需要的位数。这里用乘9,再加1,而没有用乘10的方式,是为了防止生成的随机数比较小,导致乘以位数后小于指定位数。
方法二、通过Random类
1 public static String getRandom2(int len) { 2 Random r = new Random(); 3 StringBuilder rs = new StringBuilder(); 4 for (int i = 0; i < len; i++) { 5 rs.append(r.nextInt(10)); 6 } 7 return rs.toString(); 8 }
该方法是通过Random类的nextInt(10)方法可以直接获取一个[0,9]的随机整数,然后通过指定次数的循环,来拼接随机数。Random类其实还有一些的生成随机数的方法,有兴趣可以了解一下。
方法三、通过Random类
1 public static String getRandom3(int len) { 2 int digit = (int) Math.pow(10, len - 1); 3 int rs = new Random().nextInt(digit * 10); 4 if (rs < digit) { 5 rs += digit; 6 } 7 return String.valueOf(rs); 8 }
该方法也是通过Random类,不同的是,通过指定随机数的最大值,来生成指定位数的随机整数,因为有可能位数不足,所以当小于指定位数的时候需要加上指定位数的值。举例:要生成一个4位数的随机值,那么就是生成一个小于10000的随机整数,当随机数小于1000时,加上1000,来确保位数。
方法四、通过指定数据源
1 public static String getRandom4(int len) { 2 String source = "0123456789"; 3 Random r = new Random(); 4 StringBuilder rs = new StringBuilder(); 5 for (int j = 0; j < len; j++) { 6 rs.append(source.charAt(r.nextInt(10))); 7 } 8 return rs.toString(); 9 }
该方法是预设一个数据源,然后通过Random类的nextInt方法获取到一个随机整数,将这个整数作为数据源数组的下标,再通过循环的方法来组成一个随机数。这里还可以在数据源中补充上字母,就相当于生成带字母的验证码。
PS:获取不重复的随机值
1 public static List<String> getDistinctRandom(int len, int num) { 2 Set<String> s = new HashSet<>(); 3 while (s.size() < num) { 4 s.add(getRandom4(len)); 5 } 6 return new ArrayList<>(s); 7 }
前面几种方法获取指定个数的随机数,其中是有可能有重复值的。如果想要获取不重复的随机值,也很简单,获取随机值的方式可以不变,只要把获取到的随机值都放进Set集合,直到达到需要的个数就ok了。
本文来自博客园,作者:PC君,转载请注明原文链接:https://www.cnblogs.com/pcheng/p/10956570.html