2017-09-29 55 views
-3

我的任务之一我试图生成一个16-26(包括两个端点)之间的随机数。我已经阅读并尝试了不同的方法,但出于某种原因它超出了指定的范围。这是我的时刻:试图在指定范围内获得随机值?

int dealerHand = 16 + (int) (Math.random() * ((26 - 16) + 16)); 

为什么这是行不通的任何想法?谢谢!

+0

这一定是问一百万次...... – Henry

回答

0

((26 - 16) + 16)相同(26 + (-16 + 16)所以26 + 0,所以现在的问题应该更加明显:

int dealerHand = 16 + (int) (Math.random() * 26); 

返回1642之间的数字。

你需要做的是更接近这样的:

int dealerHand = 16 + (int) (Math.random() * (26 - 16)); 

但提防Math.random()documentation:返回的数字是>= 0.0< 1.0。这意味着这段代码会生成[16;26)范围内的数字(也就是说,不包括26)。当你要包括它,这是真正的公式:

int dealerHand = 16 + (int) (Math.random() * (26 - 16 + 1)); 
+0

感谢,被更新为答案。 – MondKin

0

试试这个:

Random r = new Random(); 
int dealerHand = 16 + r.nextInt(11);