java给我15个数字而不是随机数生成器中的14个

时间:2017-11-04 01:10:39

标签: java random

我正在尝试为卡片中的卡片生成随机数字(2-14)但是,当我运行程序时,我有时会得到15.有人可以解释我做错了吗?

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

2 个答案:

答案 0 :(得分:1)

Math.random()返回介于0.0(含)和1.0(不包含)之间的值。

假设我们滚动0.99,所以我们得到13,86。所以15,86。圆形到整数,即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;

答案 1 :(得分:1)

那是因为当你将浮点数转换为整数时,它会向下舍入(它会被抛弃)。

假设您的Math.random() * 14返回13.9
在您的示例中,您为结果添加2,因此值现为13.9 + 2 = 15.9
完成所有操作后,该值将被强制转换为int。

这最后的四舍五入是为什么你有时会得到15,因为15.9的下降是15。

此示例应该可以帮助您了解发生了什么: https://repl.it/NjUT