如何获得负数在范围内的随机数?

时间:2015-01-16 03:27:27

标签: java random

请考虑以下代码:

int rand = new Random().nextInt((30 - 20) + 1) + 20

它将返回30到20之间的随机数。但是,我需要其范围包含负数。 如何在代中包含负数?我尝试过使用数字会产生负数,但这会导致错误。简单地减去或添加负数就不会产生所需的值。

编辑:抱歉,我只是半醒。正确的代码是int rand = new Random().nextInt((30 - 20) + 1) + 20;

4 个答案:

答案 0 :(得分:11)

获取minmax的设定范围之间的随机数:

int number = random.nextInt(max + 1 -min) + min; 

也适用于负数

所以:

random.nextInt(30 + 1 + 10) - 10;
// max = 30; min = -10;

将产生-10到30之间的随机int。(包括)

也适用于双打

答案 1 :(得分:9)

您可以使用Random.nextBoolean()来确定它是一个随机的正数还是负数。

    int MAX = 30;
    Random random = new Random(); //optionally, you can specify a seed, e.g. timestamp.
    int rand = random.nextInt(MAX) * (random .nextBoolean() ? -1 : 1);

答案 2 :(得分:1)

好。首先,尝试只创建一次Random实例,但是举个例子

int rand = -15 + new Random().nextInt(31);

是-15到15的范围。Random.nextInt(int) JavaDoc说(部分)返回伪随机,均匀分布的int值介于0(含)和指定值(不包括)之间。请注意,您提供的(30 - 20) + 1示例的范围是0到10(包括)。

修改

作为另一个例子,要获得20到30的范围,你会

int rand = 20 + new Random().nextInt(11);

请记住,结果的范围是0到n

修改2

  

30 - -10。我试图制作一个生存模拟器。那将是我的温度。

确定。我们将该范围写为-1030nextInt(n)将返回0n之间的值,因此,如果您希望范围低于0,则必须从结果中减去10并将10添加到{ {1}}。也就是说' S

n

现在让我们来看看我们如何确定这些数字。请注意,Random random = new Random(); int rand = random.nextInt(41) - 10; 将在nextInt()0之间返回(不包括),我们希望n-10(包括在内);因此3041,我们会减去n。如果结果为10(最小值),我们会得到0,如果结果是-10(最大值),我们会得到40

答案 3 :(得分:0)

int randomNumber=(random.nextInt(DOUBLE_MAX)-MAX);

或者,创建一个随机的正面或负面1并将其相乘。