Java生成1500到1650之间的随机值

时间:2011-03-23 01:12:35

标签: java random

我希望在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

谢谢。

3 个答案:

答案 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;

感谢。