我希望在1500和1650之间生成随机整数。
我已成功生成25到55之间的随机值(代码如下)。但是,我遇到的问题是,如果我调整代码以生成介于1500和1650之间的值,结果最终会向我提供值1500
,因为生成的大多数数字都在下面那,我的if
语句设置低于1500到1500的任何内容。
Random rand = new Random();
double angle = rand.nextInt(55);
if(angle < 25){
angle = 25;
}
double muzzlevelocity = rand.nextInt(1500) + 150;
if(muzzlevelocity < 1500){
muzzlevelocity = 1500;
}
if(muzzlevelocity > 1650){
muzzlevelocity = 1650;
}
我偶尔(尽管很少)实现1500到1650之间的结果。还有另一种(更简单/更直接)的方式可以实现我想要的结果吗?
示例输出如下:
输出1:3:
Random Angle: 25.0
Random Muzzle Velocity: 1500.0
输出2的3:
Random Angle: 30.0
Random Muzzle Velocity: 1573.0
3的输出3:
Random Angle: 43.0
Random Muzzle Velocity: 1500.0
谢谢。
答案 0 :(得分:13)
你已经倒退了;你想要
rand.nextInt(151) + 1500
从1500开始创建150个不同的值。注意我已经使用了151而不是150,因为你想要包含上限。 “if / else”是完全不必要的;所有值都在你想要的范围内。
答案 1 :(得分:4)
这段代码严重破坏;在55中有 25 26次机会,25将会产生 - 而不是“随机”。
你想要这样的东西:
public int random(Random rnd, int min, int max) {
if(min>max) { throw new IllegalArgumentException("Invalid range - "+min+" > "+max); }
return (rnd.nextInt(max+1-min)+min);
}
你可以将它用于你的两个随机数。
答案 2 :(得分:0)
不用担心,我已经解决了 - 我将上述所有内容(对于muzzlevelocity)更改为以下内容并且它完成了诀窍:
double muzzlevelocity = rand.nextInt(1651 - 1500) + 1500;
感谢。