JAVA 随机数学习
一、概念整理
1.1、隨機性:
隨機性:意味著無法預測,真正的隨機性只存在于自然世界中;如:什么地方有閃電是隨機的,有個地方正在醞釀風暴,可以相當確定那里會有閃電,但無法精確預測具體位置,所以不要站在樹下。
1.2、真隨機:
真隨機:也有不同的含義,若想要「真正的真隨機」目測只能靠量子力學了,一般的所謂真隨機當然不是指這種,而是指統計意義上的隨機,也就是具備不確定性,可以被安全的用于金融等領域。
1.3、偽隨機:
偽隨機:大部分程序和語言中的隨機數,確實都只是偽隨機。是由可確定的函數(常用線性同余),通過一個種子(常用時鐘)產生的。這意味著:如果知道了種子,或者已經產生的隨機數,都可能獲得接下來隨機數序列的信息(可預測性)。
1.4、隨機種子:
隨機種子:隨機數就是就隨機數種子中取出的數。種子就是個序號,這個序號交給一個數列管理器,通過這個序號,你從管理器中取出一個數列,這個數列就是你通過那個序號得到的隨機數。
二、JAVA生成隨機數的方案
2.1、java.lang.Math 類:Math類以靜態方法的方式提供常用的數學方法。
public static void main(String[] args) {//Math.random() 方法是一個可以產生[0.0,1.0]區間內的一個雙精度浮點數的方法。System.out.println("產生[0.0,1.0]區間內的一個雙精度浮點數:" + Math.random());System.out.println("產生一個100以內的整數:" + (int) (Math.random() * 100));System.out.println("產生一個1-50 之間的隨機蒸數:" + (1 + (int) (Math.random() * 50)));}執行結果:
產生[0.0,1.0]區間內的一個雙精度浮點數:0.7383840156189087 產生一個100以內的整數:43 產生一個1-50 之間的隨機蒸數:22.2、java.util.Random 類:隨機數生成器
public static void main(String[] args) {Random random = new Random();//random.nextInt(X) ==> 產生一個0到x-1的正數System.out.println("產生[0.0,1.0]區間內的一個雙精度浮點數:" + random.nextDouble());System.out.println("產生一個100以內的整數:" + random.nextInt(101));System.out.println("產生一個1-50 之間的隨機蒸數:" + (1 + random.nextInt(50)));}執行結果:
產生[0.0,1.0]區間內的一個雙精度浮點數:0.6842949962898257 產生一個100以內的整數:41 產生一個1-50 之間的隨機蒸數:52.3、Math.random() 和 new Random() 對比
2.3.1、經過2.1和2.2中代碼實例,我們可以看出:?Math 和?Random 都可以實現我們一般隨機數的功能;
2.3.2、經過底層代碼閱讀,我們會發現Math.random()其實是對 java.util.Random 類的 nextDouble 方法的封裝;
2.3.3、在1.3 和 1.4中提出過隨機種子的概念,那么我們來看?Random 類;發現構造方法分兩中:Random() 和 Random(long seed)
2.3.3.1、Random():無參構造方法;種子有特定公式計算,所以每次執行的種子都會不一致;
2.3.3.2、Random(long seed);有參構造方法;種子是根據 seed 入參計算生成的
注:以上內容僅提供參考和交流,請勿用于商業用途,如有侵權聯系本人刪除!
總結
以上是生活随笔為你收集整理的JAVA 随机数学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络编程:TCP简单实现群聊功能
- 下一篇: 安装python3并安装paramiko