我需要使用Math.random()在两个给定值之间生成随机数,但在此比较中忽略了两个给定值或仅视情况而定一个。
这些是要执行的值:
介于-7和0之间,不包括0。
在0到4之间,两个值都排除在外。
在4到5之间,不包括4。
在第一种情况下,我尝试了以下代码:
double fv = (-7) + Math.random() * (0 -7);
System.out.println(fv);
但这给了我-13.00123之类的怪异东西。
这是为了获得学位,所以我必须保持简单。
有什么想法吗?
答案 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()方法中的最后一个值。