2017-02-28 21 views
-3

我想知道爲什麼每次運行代碼時第一列中出現的數字都會發生變化。第二列中的數字將始終相同。 (83 51 77 90 96 58 35 38 86 54)?兩個隨機語句之間的區別

Random randomGenerator = new Random(); 
Random otherGenerator = new Random(123); 
for(int i = 0; i < 10; i++) { 
    int number1 = 1 + randomGenerator.nextInt(100); 
    int number2 = 1 + otherGenerator.nextInt(100); 
    System.out.println("random numbers "+number1+" " +number2); 
} 
+0

在第二列中的數字是不總是相同.... –

+1

@OusmaneDiaw - 我認爲OP意味着代碼生成值的相同序列中的第二列中的每個時間這個代碼運行,而不是第二列填充單個值。 –

+0

@TedHopp我明白了。描述有點困惑,但我現在明白了。 –

回答

3

這是因爲用於所述第二列中的Random以恆定123接種,而一個用於第一列具有每次執行代碼時間變化的種子。

請注意,由Random產生的值不是真正隨機的;他們完全由種子決定。

+0

非常感謝您的回答 – Physics3067

0

的醫生說:

創建使用單個long種子新的隨機數發生器。種子是內部狀態的僞隨機數發生器的的初始值是由方法

您已固定在第二發生器的初始狀態保持被固定,並且它是從種子的是,下一個隨機數字生成。另一方面,如果您使用System.nanoTime()生成種子,您會在每次生成器創建不同的隨機數時看到。

參見:https://docs.oracle.com/javase/7/docs/api/java/util/Random.html#Random(long)