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了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM