使用 Java Math.random() 生成指定位數隨機數 對應 python 生成指定位數隨機數


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()


免責聲明!

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



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