Java 中常見的隨機數的生成方式有三種
第一種:通過 Math.random() 返回一個0(包含)到1(不包含)之間的 double 值。
第二種:通過 Random 類來產生一個隨機數。
第三種:通過 System.currentTimeMillis() 來獲取一個當前時間毫秒數的 long 型數字。
Java指定位數隨機數
通過以上三種方式,可演變的使用Java生成指定位數隨機數的方式就有很多種,下面來擴列兩種且小而巧的方法:
使用 Math.random() 生成指定位數隨機數
比如生成指定8位隨機數,可以像下面一樣改造一下:
int randomNum = (int) ((Math.random() * 9 + 1) * 10000000);
注:參數 10000000 可以控制隨機數位數,10000000 這樣出來8位數,100000 這樣出來6位數。
注:(int) (Math.random() * 100 + 1) 和 (int) (Math.random() * 101) 的區別:
Math.random() * 100 + 1:產生1~100之間的隨機整數(包括1和100)
Math.random() * 101 :產生0~100之間的隨機整數(包括0和100)
測試結果:重復率比較高。
隨機生機8位數,100000次測試,生成不重復個數:99948,重復個數:52
使用Java new Random() 生成指定位數隨機數
用 new Random().nextInt(); 可能會出現負數或較指定位數不夠的情況。可以像下面一樣改造一下補齊:
String randomNum = String.format("%010d", Math.abs(new Random().nextInt()));
Java隨機示例
public static void main(String[] args) {
String randomNum;
List<String> numList1 = new ArrayList<>();
List<String> numList2 = new ArrayList<>();
for (int i = 0; i < 100000; i++) {
randomNum = String.format("%010d", Math.abs(new Random().nextInt()));
if (numList1.contains(randomNum)) {
numList2.add(randomNum);
} else {
numList1.add(randomNum);
}
}
System.out.println("隨機生機10位數,100000次測試,生成不重復個數:" + numList1.size() + ",重復個數:" + numList2.size());
}
注:String 占位表達格式中:0代表前面要補的字符,10代表字符串長度,d表示參數為整數類型。
測試結果:10萬個有點慢
隨機生機10位數,100000次測試,生成不重復個數:99998,重復個數:2
100000個隨機10位數,2個重復。但一般場景夠用了.
Python生成隨機5位數對應 Java 的 Math.random()方法
import math
import random
num_str = math.floor(1e5 * random.random())
print(num_str)
使用Python生成隨機的五位手機驗證碼
# -*- coding:utf-8 -*-
#生成五位隨機數,模仿手機驗證碼
#導入random庫,可以生成隨機數
import random
def ran():
L = []
M = []
#通過遍歷5次,生成五個元素,並插入列表L
for i in range(5):
L.append(random.randint(0,9))
if len(L) >= 5:
break
#通過遍歷將L的五個元素由數字轉為字符串,導入空列表M,並使用join方法合成為字符串
for d in L:
M.append(str(d))
S = '' .join(M)
print(S)
#調用函數ran()
ran()