需要在两个值之间生成随机数,而忽略给定值

时间:2019-11-18 13:29:46

标签: java random

我需要使用Math.random()在两个给定值之间生成随机数,但在此比较中忽略了两个给定值或仅视情况而定一个。

这些是要执行的值:

介于-7和0之间,不包括0。
在0到4之间,两个值都排除在外。
在4到5之间,不包括4。

在第一种情况下,我尝试了以下代码:

double fv = (-7) + Math.random() * (0 -7);
System.out.println(fv);

但这给了我-13.00123之类的怪异东西。

这是为了获得学位,所以我必须保持简单。

有什么想法吗?

5 个答案:

答案 0 :(得分:0)

生成一个介于-7和0之间的数字(不包括0)。

this.gotData=this.gotData.bind(this)

当随机数= 0时,所需值为-7。但是所需的值却永远不会为0,因为 double w = (Math.random() - 1) * 7; 永远不会为1。

对于其他人

Math.random()

答案 1 :(得分:0)

范围内随机数的正确公式为Min + (Math.random() * (Max - Min))(包括下限,但不包括上限)。
对于您的电话号码,正确的方法是

double fv = (-7) + Math.random() * (0 - -7);

由于您在公式中仅使用了一个-,因此假设Min的值为7,而不是-7,这会导致错误的结果。

答案 2 :(得分:0)

double fv = (-7) + Math.random() * 7;
System.out.println(fv);

在0.0和1.0之间(包括1.0本身)创建一个随机双精度值(包括0.0和1.0)。乘以7得到的假设范围是0到6.99 [9]。减去7将随机数的范围从-7到0.00 [...] 01 您可以使用此信息以类似的方式为所需的随机数推导公式。

答案 3 :(得分:0)

您可以设置一个枚举以确定包容性。

import java.util.concurrent.ThreadLocalRandom;

public class RandomUtil {
    private enum Inclusivity { INCLUSIVE, EXCLUSIVE; }

    public static double randomDouble(double minValue, double maxValue) {
        return randomDouble(minValue, maxValue, Inclusivity.INCLUSIVE, Inclusivity.EXCLUSIVE);
    }

    public static double randomDouble(double minValue, double maxValue, Inclusivity minInclusivity, Inclusivity maxInclusivity) {
        if (minInclusivity == Inclusivity.EXCLUSIVE) {
            minValue += 1;
        }

        if (maxInclusivity == Inclusivity.INCLUSIVE) {
            maxValue += 1;
        }

        return ThreadLocalRandom.current().nextDouble(minValue, maxValue);
    }

    public static void main(String[] args) {
        System.out.println(randomDouble(-7, 0, Inclusivity.INCLUSIVE, Inclusivity.EXCLUSIVE)); // default
        System.out.println(randomDouble( 0, 4, Inclusivity.EXCLUSIVE, Inclusivity.EXCLUSIVE));
        System.out.println(randomDouble( 4, 5, Inclusivity.EXCLUSIVE, Inclusivity.INCLUSIVE));
    }
}

答案 4 :(得分:0)

尝试一下

Random random = new Random();
random.ints(1, -7, 0).forEach(System.out::println);

将排除ints()方法中的最后一个值。