2016-05-15 19 views
-2

幾年前我停止了編程,因爲我不認爲我會畢業。驚喜,現在我是,我必須刷新生鏽的新手技能。我決定從用Java編寫的骰子滾動程序開始。這個程序的第一個版本應該是在1到10之間吐出一個隨機數字。在我去的時候,我打算用一個GUI來擴展它,讓用戶選擇擲骰子的數量和類型。用Java創建一個Dice Roller。幫我理解爲什麼這有效?

這個程序的第一個版本的作品。我的問題是我不知道它爲什麼起作用。我第一次使用java.util.random並使用random.nextInt(),但範圍是巨大的,我不知道如何限制它到一個特定的範圍。

我在網上搜索,發現有用的東西。這是我的。

class DiceRoller { 

    public static void main(String[] arguments){ 

     int min = 1; 
     int max; 
     int result; 

     result = rollDice(10, min); 

     System.out.println(result); 
    } 

    public static int rollDice(int maximum, int minimum){ 
     return ((int) (Math.random()*(maximum - minimum))) + minimum; 
    } 
} 

,我發現,使這項工作的具體部分是:

public static int rollDice(int maximum, int minimum){ 
     return ((int) (Math.random()*(maximum - minimum))) + minimum; 
    } 

但我不明白爲什麼它的工作原理。 Math類中的random()與java.util中的Random有什麼不同?爲什麼需要取隨機數並乘以最大值和最小值的差值,然後將結果加到最小值?說實話,我覺得自己很愚蠢,但我想明白爲什麼會這樣做,而不是僅僅接受代碼並使用它,因爲它確實如此。

編輯:我知道..我知道..我應該剛剛讀過類文檔。無論如何,感謝我的侮辱和回答。我很感謝答覆,並感謝亞倫的解釋。

+3

閱讀此問題http://stackoverflow.com/questions/363681/generating-random-integers-in-a-specific-range.some答案描述它如何works.read這個答案http://stackoverflow.com/ a/363732/2227526 –

+0

Math.random返回一個0.0到1.0之間的隨機double。在紙上寫出這個等式的作用,......想一想。 –

+0

官方的JavaDocs始終是一個很好的信息來源。你會發現'Random'和'Math.random()'之間的區別,當然還有每個類和方法的文檔。 鏈接:https://docs.oracle.com/javase/8/docs/api/ – Michael

回答

1

Math.random()返回一個隨機數 0和1之間
所以,如果你想0和n之間的隨機數,而不是,你就必須用n繁殖。
現在如果你想要一個在m和n之間的數字,你會想要做那裏做的事情:乘以n - m,然後加上m。

實施例與圖2和5之間的輥:

  • 我有我的隨機數0和1之間
  • 我乘以5 - 2 = 3。現在我有一個隨機0和3之間
  • 我添加2.數目現在我有一個隨機數2和5
0
return ((int) (Math.random()*(maximum - minimum))) + minimum; 

之間這具有4個部分(在執行順序): Math.random()使得一些0和1之間

*(maximum-minimim)獲取範圍(之間的距離)max. and min.然後它縮放隨機數到該範圍。例如。 0.5*(100-0) = 50, 0*(100-0) = 0, 0.99*(100-0) = 99。不是說最低值這裏是0,最高爲max. - min.

(int)注意到你有多少,某處0和你的範圍之間,而事實證明進入次數INT取下來(我總是用兩種Math.round(), .floor(), or .ceil()所以我真的很驚訝。

+ minimum通過將數字向上移動那麼多來確保最低可能值(其爲0直到現在)是minimum。 (請記住,我們先減去最小值)現在最高可能值爲maximum

相關問題