[英]Need to generate random numbers between two values ignoring the given values
我需要在兩個給定值之間使用 Math.random() 生成隨機數,但在比較時忽略兩個給定值或僅一個,具體取決於具體情況。
這些是要做的值:
介於 -7 和 0 之間,不包括 0。
介於 0 和 4 之間,這兩個值均不包括在內。
4 到 5 之間,不包括 4。
我已經嘗試過第一種情況下的代碼:
double fv = (-7) + Math.random() * (0 -7);
System.out.println(fv);
但它給了我奇怪的結果,比如-13.00123。
這是為了學位練習,所以我必須保持簡單。
有任何想法嗎?
生成一個介於 -7 和 0 之間的數字,不包括 0。
double w = (Math.random() - 1) * 7;
當隨機數 = 0 時,所需值為 -7。 但是所需的值 but 永遠不會是 0,因為Math.random()
永遠不會是 1。
對於其他人
// between 0 and 4 both values excluded.
double r = Math.random();
double x = (-3 * r); // -3 < x <= 0
double xx = r + 3; // 3 <= xx < 4
x += xx; // 0 < x < 4
// between 4 and 5 excluding 4
double w = (-1 * Math.random()); // -1 < w <= 0
w += 5; // 4 < w <= 5
范圍內隨機數的正確公式是Min + (Math.random() * (Max - Min))
(包括下限和不包括上限)。
對於您的數字,正確的方法是
double fv = (-7) + Math.random() * (0 - -7);
由於您只使用了一個-
在公式中, Min
被假定為 7 而不是 -7,這會導致錯誤的結果。
double fv = (-7) + Math.random() * 7;
System.out.println(fv);
在(包括)0.0 和 1.0(不包括 1.0 本身)之間創建一個隨機雙精度數。 乘以 7 得到 0 到 6.99[...]9 的假設范圍。 減去 7 使隨機數的范圍從 -7 到 0.00[...]01 您可以使用此信息以類似的方式扣除所需隨機數的公式。
您可以設置一個枚舉來確定包容性。
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));
}
}
嘗試這個
Random random = new Random();
random.ints(1, -7, 0).forEach(System.out::println);
ints() 方法中的最后一個值將被排除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.