我的任务之一我试图生成一个16-26(包括两个端点)之间的随机数。我已经阅读并尝试了不同的方法,但出于某种原因它超出了指定的范围。这是我的时刻:试图在指定范围内获得随机值?
int dealerHand = 16 + (int) (Math.random() * ((26 - 16) + 16));
为什么这是行不通的任何想法?谢谢!
我的任务之一我试图生成一个16-26(包括两个端点)之间的随机数。我已经阅读并尝试了不同的方法,但出于某种原因它超出了指定的范围。这是我的时刻:试图在指定范围内获得随机值?
int dealerHand = 16 + (int) (Math.random() * ((26 - 16) + 16));
为什么这是行不通的任何想法?谢谢!
((26 - 16) + 16)
相同(26 + (-16 + 16)
所以26 + 0
,所以现在的问题应该更加明显:
int dealerHand = 16 + (int) (Math.random() * 26);
返回16
和42
之间的数字。
你需要做的是更接近这样的:
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));
感谢,被更新为答案。 – MondKin
试试这个:
Random r = new Random();
int dealerHand = 16 + r.nextInt(11);
这一定是问一百万次...... – Henry