Yanıtlar:
rangeMin
Ve arasında rastgele bir değer üretmek için rangeMax
:
Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
rangeMin
ve arasındaki aralık rangeMax
büyükse, aralarında 10.000.000 ayrı çift değer olabilir. Bunun sonucu, (rangeMax - rangeMin) * r.nextDouble()
bu olası 10.000.000 değerin yalnızca 10.000'i arasından seçim yapacaktır. (Bunun mükemmel bir açıklama olmadığını hissediyorum, ama belki biraz yardımcı olur ...)
Bu soru Java 7 sürümünden önce sorulmuştur, ancak şimdi Java 7 (ve üstü) API'sini kullanmanın başka bir yolu daha vardır:
double random = ThreadLocalRandom.current().nextDouble(min, max);
nextDouble
minimum (dahil) ile maksimum (hariç) arasında sahte bir çift değer döndürür. Sınırlar zorunlu değildir int
ve olabilir double
.
Bunu kullan:
double start = 400;
double end = 402;
double random = new Random().nextDouble();
double result = start + (random * (end - start));
System.out.println(result);
DÜZENLE:
new Random().nextDouble()
: rastgele 0 ile 1 arasında bir sayı oluşturur.
start
: numarayı "sağa" kaydırmak için başlangıç numarası
end - start
: Aralık. Rastgele size bu sayının% 0 ila% 100'ünü verir, çünkü rastgele size 0'dan 1'e kadar bir sayı verir.
DÜZENLEME 2: Tks @daniel ve @aaa bbb. İlk cevabım yanlıştı.
import java.util.Random;
public class MyClass {
public static void main(String args[]) {
Double min = 0.0; // Set To Your Desired Min Value
Double max = 10.0; // Set To Your Desired Max Value
double x = (Math.random() * ((max - min) + 1)) + min; // This Will Create A Random Number Inbetween Your Min And Max.
double xrounded = Math.round(x * 100.0) / 100.0; // Creates Answer To The Nearest 100 th, You Can Modify This To Change How It Rounds.
System.out.println(xrounded); // This Will Now Print Out The Rounded, Random Number.
}
}
Rastgele ana fikir, sahte bir değer döndürmesi. Tamamen rasgele işlevler diye bir şey yoktur, bu nedenle, aynı tohumu kullanan rastgele örnekler belirli koşullarda aynı değeri döndürür.
Anlamak için önce işlev belgesini görüntülemek iyi bir uygulamadır ( https://docs.oracle.com/javase/8/docs/api/java/util/Random.html )
Şimdi nextDouble () fonksiyonunun döndürülen değerinin 0.0 ile 1.0 arasında bir sahte değer olduğunu anladığımıza göre, bunu kendi yararımıza kullanabiliriz.
Sınırların geçerli olduğunu belirten A ve B arasında rastgele bir sayı oluşturmak için (A> B) şunları yapmamız gerekir: 1. A ve B arasındaki aralığı bulmak, böylece kaç tane "adım" a sahip olduğumuzu öğrenebiliriz. 2. kaç adım atacağınızı belirlemek için rastgele fonksiyonu kullanın (döndürülen değer 0.0 ile 1.0 arasında olduğundan "rastgele bir artış yüzdesi seçin" olarak düşünebilirsiniz. 3. ofseti ekleyin
Tüm bunlardan sonra, çetenin size bunu yapmanın en kolay ve en yaygın yolunu verdiğini görebilirsiniz.
çift randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble ();
çift RandomValue = Ofset + (Aralık) * (0.0-1.0 arasında randomVal)
double rangeMax= Double.MAX_VALUE;
vedouble rangeMin= -rangeMax;
karşılığında daima sonsuz bir değer elde edersiniz. Kontrol etmek isteyebilirsinizDouble.valueOf(rangeMax-rangeMin).isInfinite()
.