2017-11-04 53 views
0

我想在卡組中生成隨機數(2-14)然而,當我運行程序時,我有時候會得到15個。我做錯了什麼?java給我15個數字而不是14個隨機數發生器

dealer1= (int) (Math.random() *14+2); 
    dealer2= (int) (Math.random() *14+2); 
    player1= (int) (Math.random() *14+2); 
    player2= (int) (Math.random() *14+2); 

回答

1

Math.random()返回介於0.0(含)和1.0(不含)之間的值。

說我們滾動0.99,所以我們得到13,86。所以15,86。四捨五入爲int,這是15

請考慮使用Random相反,它有一個方法nextInt(arg)0..arg-1返回隨機值:

Random random = new Random(); // preferably private, static, final, shared across your application 
int dealer1 = random.nextInt(13) + 2; 
int dealer2 = random.nextInt(13) + 2; 
int player1 = random.nextInt(13) + 2; 
int player2 = random.nextInt(13) + 2; 
+0

甚至更​​好'的SecureRandom。 nextInt(INT)'。 – Robert

1

這是因爲,當您轉換浮點數爲整數它輪向下(它被取消)。

比方說,你Math.random() * 14返回13.9
在你的榜樣,你加2到你的結果,因此現在的價值是13.9 + 2 = 15.9
一旦所有操作完成,該值通過轉換爲int四捨五入。

這最後捨去是爲什麼您使用的是15,有時結束了,15.9四捨五入爲15。

本示例將幫助您瞭解正在發生的事情: https://repl.it/NjUT