您的位置:首页 > 编程语言 > Java开发

JAVA中生成指定位数随机数的方法总结

2020-07-07 11:52 190 查看

方法一、通过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(9)方法可以直接获取一个[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了。

转载:https://www.cnblogs.com/pcheng/p/10956570.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: