首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 指定範圍生成隨機整數:Math.random 通用公式與 ThreadLocalRandom 現代寫法

     編輯:程式設計綜合問答

通用公式 (含邊界)

生成 `[min, max]` 區間整數 (包含兩端):

int randomInRange(int min, int max) {
    if (min > max) { int t = min; min = max; max = t; } // 自動交換
    return (int) (Math.random() * (max - min + 1)) + min;
}

原理解析

  • `Math.random()` 返回 `[0.0, 1.0)` 雙精度浮點數。
  • 乘以 `(max - min + 1)` → `[0, max-min+1)`。
  • 強轉 `int` 截取整數部分 → `[0, max-min]`。
  • 加 `min` → `[min, max]`。

現代推薦:ThreadLocalRandom (Java 7+)

import java.util.concurrent.ThreadLocalRandom;

int random = ThreadLocalRandom.current().nextInt(min, max + 1); // [min, max]
// 多線程環境下無競爭,性能優於 Math.random() (內部同步) 與 Random (共享種子)。

避坑指南

  1. 邊界包含性:`nextInt(origin, bound)` 包含 origin,**不包含** bound,故 `max+1`。
  2. 參數順序:`nextInt(min, max)` 要求 `min < max`,否則拋 `IllegalArgumentException`,需自行交換或驗證。
  3. 大範圍長整型:`nextLong(min, max)` 同理。
  4. 加密安全:安全敏感場景用 `SecureRandom`,性能較低。

一行代碼速查


// Java 8+ Lambda 風格工具方法
public static int randomInt(int a, int b) {
    return ThreadLocalRandom.current().nextInt(Math.min(a, b), Math.max(a, b) + 1);
}

拋棄 `Math.random()`,拥抱 `ThreadLocalRandom`,代碼更簡潔、性能更強、線程更安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved