zoukankan      html  css  js  c++  java
  • 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(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了。

  • 相关阅读:
    高精度类模板
    NOIP2012 疫情控制
    NOIP2012 借教室
    Uva 长城守卫——1335
    Uva 网络(Network,Seoul 2007,LA 3902)
    oracle 中decode函数用法
    oracle数据库查询出多条数据,合并,之后列转行
    mysql中插入序列表
    mysql中创建event定时任务
    mysql 取得各种时间
  • 原文地址:https://www.cnblogs.com/pcheng/p/10956570.html
Copyright © 2011-2022 走看看