爲什麼在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 - 9和10之間產生?爲什麼(int)Math.random()* 10在Java中產生10?
我的理解是Math.random()創建0到1.0之間的數字。
因此它可以產生0.99987,它通過* 10變爲10,不是嗎?
int targetNumber = (int) (Math.random()* 10);
投射double
到在Java中的int
做整數截斷。這意味着,如果您的隨機數爲0.99987,然後乘以10給出了9.9987,和整數截斷給出9.
原因(的Math.random()* 10被使用INT()向下舍入,所以INT(9.9999999)產生。
從數學的Javadoc:
「的僞隨機兩倍大於或等於0.0且小於1.0 「
1.0與Math.random不是一個可能的值。所以你不能獲得10和(INT)9.999給出了9
0.99987它通過* 10
變爲10不是當我去學校。它變成9.9987。
Math.floor(的Math.random()* 10)+ 1
現在你得到1和10,包括10號
你總是可以在+1釘之間的整數到命令的末尾,允許它將1加到生成的數字上。所以,你將有這樣的事情:
int randomnumber = ((int)(Math.random()*10) +1);
這將產生任何整數1和10
如果你想在0和10之間的任意整數之間,你可以這樣做:
int randomnumber = ((int)(Math.random()*11) -1);
希望這會有所幫助!
您可以添加1到方程式,從而輸出將是從1到10,而不是0到9 這樣的:
int targetNumber = (int) (Math.random()* 10+1);
您應該使用Random.nextInt()得到「更好的」隨機數字無論如何:http://stackoverflow.com/questions/738629/math-random-versus-random-nextintint/738651#738651 – Goibniu 2010-06-22 10:10:54