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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)