2017-11-04 48 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