JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法。

方法一、通过Math类

     public static String getRandom1(int len) {
int rs = (int) ((Math.random() * 9 + 1) * Math.pow(10, len - 1));
return String.valueOf(rs);
}

  该方法是通过Math.random()获取[0.0, 1.0)的随机数,再乘以需要的位数。这里用乘9,再加1,而没有用乘10的方式,是为了防止生成的随机数比较小,导致乘以位数后小于指定位数。

方法二、通过Random类

     public static String getRandom2(int len) {
Random r = new Random();
StringBuilder rs = new StringBuilder();
for (int i = 0; i < len; i++) {
rs.append(r.nextInt(10));
}
return rs.toString();
}

  该方法是通过Random类的nextInt(9)方法可以直接获取一个[0,9]的随机整数,然后通过指定次数的循环,来拼接随机数。Random类其实还有一些的生成随机数的方法,有兴趣可以了解一下。

方法三、通过Random类

     public static String getRandom3(int len) {
int digit = (int) Math.pow(10, len - 1);
int rs = new Random().nextInt(digit * 10);
if (rs < digit) {
rs += digit;
}
return String.valueOf(rs);
}

  该方法也是通过Random类,不同的是,通过指定随机数的最大值,来生成指定位数的随机整数,因为有可能位数不足,所以当小于指定位数的时候需要加上指定位数的值。举例:要生成一个4位数的随机值,那么就是生成一个小于10000的随机整数,当随机数小于1000时,加上1000,来确保位数。

方法四、通过指定数据源

     public static String getRandom4(int len) {
String source = "0123456789";
Random r = new Random();
StringBuilder rs = new StringBuilder();
for (int j = 0; j < len; j++) {
rs.append(source.charAt(r.nextInt(10)));
}
return rs.toString();
}

  该方法是预设一个数据源,然后通过Random类的nextInt方法获取到一个随机整数,将这个整数作为数据源数组的下标,再通过循环的方法来组成一个随机数。这里还可以在数据源中补充上字母,就相当于生成带字母的验证码。

PS:获取不重复的随机值

     public static List<String> getDistinctRandom(int len, int num) {
Set<String> s = new HashSet<>();
while (s.size() < num) {
s.add(getRandom4(len));
}
return new ArrayList<>(s);
}

  前面几种方法获取指定个数的随机数,其中是有可能有重复值的。如果想要获取不重复的随机值,也很简单,获取随机值的方式可以不变,只要把获取到的随机值都放进Set集合,直到达到需要的个数就ok了。

JAVA中生成指定位数随机数的方法总结的更多相关文章

  1. random and password 在Linux下生成crypt加密密码的方法,shell 生成指定范围随机数与随机字符串

    openssl rand -hex n (n is number of characters) LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head ...

  2. JAVA中生成、解析二维码图片的方法

    JAVA中生成.解析二维码的方法并不复杂,使用google的zxing包就可以实现.下面的方法包含了生成二维码.在中间附加logo.添加文字功能,并有解析二维码的方法. 一.下载zxing的架包,并导 ...

  3. 【学习笔记】Java中生成对象的5中方法

    概述:本文介绍以下java五种创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.使用Class类的newInstance方法 3.运用反射手段,调用java.lang.re ...

  4. java中生成不重复随机的数字

    Java中产生随机数 1 . 调用java.lang下面Math类中的random()方法产生随机数 新建一个文件后缀名为java的文件,文件名取为MyRandom,该类中编写如下的代码: publi ...

  5. java中获取日期和时间的方法总结

    1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下:  要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...

  6. shell 生成指定范围随机数与随机字符串 .

    shell 生成指定范围随机数与随机字符串         分类:             shell              2014-04-22 22:17     20902人阅读     评 ...

  7. 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题

    因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...

  8. 在java中生成二维码,并直接输出到jsp页面

    在java中生成的二维码不存到磁盘里要直接输出到页面上,这就需要把生成的二维码直接以流的形式输出到页面上,我用的是myeclipse 和 tomcat 它的原理是:在加载页面时,根据img的src(c ...

  9. java中常用的字符串的截取方法

    java中常用的字符串的截取方法   1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int l ...

随机推荐

  1. adb命令篇

    前言    Android的adb提供了很多命令,功能很强大,可以为开发和调试带来很大的便利.当然本文并不是介绍各种命令的文章,而是用于记录在平时工作中需要经常使用的命令,方便平时工作时使用,所以以后 ...

  2. TabBar 设置可滚动:isScrollable: true

    appBar: AppBar( bottom: TabBar( // 设置可滚动 isScrollable: true, controller: _tabController, tabs: tabs. ...

  3. 22、pandas表格、文件和数据库模块

    pandas官方文档:https://pandas.pydata.org/pandas-docs/stable/?v=20190307135750 pandas基于Numpy,可以看成是处理文本或者表 ...

  4. Can总线上的电平及物理层仲裁

    CAN总线采用差分信号传输,通常情况下只需要两根信号线(CAN-H和CAN-L)就可以进行正常的通信.在干扰比较强的场合,还需要用到屏蔽地即CAN-G(主要功能是屏蔽干扰信号),CAN协议推荐用户使用 ...

  5. Spring的三大核心思想:IOC(控制反转),DI(依赖注入),AOP(面向切面编程)

    Spring核心思想,IoC与DI详解(如果还不明白,放弃java吧) 1.IoC是什么?    IoC(Inversion of Control)控制反转,IoC是一种新的Java编程模式,目前很多 ...

  6. 解决:C++ 中 main函数 wmain函数 _tmain函数 WinMain函数 wWInMain函数 _tWinMain函数的区别

    main函数与WinMain函数区别: 前者为控制台程序入口主函数,后者为Windows API窗体程序入口函数,在windef.h文件中定义. main函数与wmain函数 | WinMain函数与 ...

  7. 传统ELK分布式日志收集的缺点?

    传统ELK图示: 单纯使用ElK实现分布式日志收集缺点? 1.logstash太多了,扩展不好. 如上图这种形式就是一个 tomcat 对应一个 logstash,新增一个节点就得同样的拥有 logs ...

  8. OpenCV 学习笔记(8)彩色图像RGB通道的分离、合并与显示

    https://blog.csdn.net/ZYTTAE/article/details/42234989 由于算法的需要,需要把彩色图像的R.G.B值分离出来,OpenCV中正好有split() 和 ...

  9. 优化sql技巧

    当表很大的时候可以设计冗余字段,避免与大表连表查询造成性能低下 比如日志表和用户表,日志表通常到后期会相当的大可以做一个username的冗余字段,避免查看username的时候去和user表关联 当 ...

  10. haproxy 2.0 dataplaneapi rest api 转为graphql docker 镜像

    为了方便直接使用haproxy dataplaneapi graphql 格式的查询,制作了一个简单的docker 镜像 基于dotenv 进行配置管理,可以直接通过环境变量传入参数,处理不同hapr ...