2010-06-22 43 views
4

爲什麼在0 - 9和10之間產生?爲什麼(int)Math.random()* 10在Java中產生10?

我的理解是Math.random()創建0到1.0之間的數字。

因此它可以產生0.99987,它通過* 10變爲10,不是嗎?

int targetNumber = (int) (Math.random()* 10); 
+0

您應該使用Random.nextInt()得到「更好的」隨機數字無論如何:http://stackoverflow.com/questions/738629/math-random-versus-random-nextintint/738651#738651 – Goibniu 2010-06-22 10:10:54

回答

17

投射double到在Java中的int做整數截斷。這意味着,如果您的隨機數爲0.99987,然後乘以10給出了9.9987,和整數截斷給出9.

2

原因(的Math.random()* 10被使用INT()向下舍入,所以INT(9.9999999)產生。

1

由於(int)回合下來。
(int)9.999導致9. //整數截斷

+1

有一個錯字,(int)0.999結果在0 – pgras 2010-06-22 10:58:55

+0

很確定。謝謝。 – Kobi 2010-06-22 12:30:47

14

從數學的Javadoc:

「的僞隨機兩倍大於或等於0.0且小於1.0 「

1.0與Math.random不是一個可能的值。所以你不能獲得10和(INT)9.999給出了9

0

0.99987它通過* 10

變爲10不是當我去學校。它變成9.9987。

0

Math.floor(的Math.random()* 10)+ 1

現在你得到1和10,包括10號

0

你總是可以在+1釘之間的整數到命令的末尾,允許它將1加到生成的數字上。所以,你將有這樣的事情:

int randomnumber = ((int)(Math.random()*10) +1); 

這將產生任何整數1和10

如果你想在0和10之間的任意整數之間,你可以這樣做:

int randomnumber = ((int)(Math.random()*11) -1); 

希望這會有所幫助!

0

您可以添加1到方程式,從而輸出將是從1到10,而不是0到9 這樣的:

int targetNumber = (int) (Math.random()* 10+1); 
相關問題