Saya memiliki dua ganda seperti berikut ini
double min = 100;
double max = 101;
dan dengan generator acak, saya harus membuat nilai ganda antara kisaran min dan maks.
Random r = new Random();
r.nextDouble();
tetapi tidak ada apa pun di sini tempat kami dapat menentukan rentang.
double rangeMax= Double.MAX_VALUE;
dandouble rangeMin= -rangeMax;
Anda akan selalu mendapatkan nilai tak terbatas sebagai imbalan. Anda mungkin ingin memeriksaDouble.valueOf(rangeMax-rangeMin).isInfinite()
.rangeMin
danrangeMax
besar, maka mungkin ada 10.000.000 nilai ganda yang berbeda di antara mereka. Hasilnya(rangeMax - rangeMin) * r.nextDouble()
hanya akan memilih antara 10.000 dari nilai yang mungkin 10.000.000. (Saya merasa ini bukan penjelasan yang sempurna, tapi mungkin ini membantu sedikit ...)Pertanyaan ini ditanyakan sebelum rilis Java 7 tetapi sekarang, ada cara lain yang memungkinkan menggunakan Java 7 (dan di atas) API:
nextDouble
akan mengembalikan nilai ganda pseudorandom antara minimum (inklusif) dan maksimum (eksklusif). Batas belum tentuint
, dan bisadouble
.sumber
Gunakan ini:
EDIT:
new Random().nextDouble()
: secara acak menghasilkan angka antara 0 dan 1.start
: nomor mulai, untuk menggeser angka "ke kanan"end - start
: interval. Random memberi Anda dari 0% hingga 100% dari angka ini, karena acak memberi Anda angka dari 0 hingga 1.EDIT 2: Tks @daniel dan @aaa bbb. Jawaban pertama saya salah.
sumber
sumber
sumber
Gagasan utama acak adalah mengembalikan nilai pseudorandom. Tidak ada yang namanya fungsi acak penuh, karenanya, 2 instance acak menggunakan seed yang sama akan mengembalikan nilai yang sama dalam kondisi tertentu.
Ini adalah praktik yang baik untuk terlebih dahulu melihat fungsi doc untuk memahaminya ( https://docs.oracle.com/javase/8/docs/api/java/util/Random.html )
Sekarang kita mengerti bahwa nilai yang dikembalikan dari fungsi nextDouble () adalah nilai pseudorandom antara 0,0 dan 1,0 kita dapat menggunakannya untuk keuntungan kita.
Untuk membuat angka acak antara A dan B memberikan bahwa batas-batasnya valid (A> B) kita perlu: 1. menemukan rentang antara A dan B sehingga kita bisa tahu bagaimana banyak "langkah" yang kita miliki. 2. gunakan fungsi acak untuk menentukan berapa banyak langkah yang harus diambil (karena nilai yang dikembalikan adalah antara 0,0 dan 1,0 Anda dapat menganggapnya sebagai "pilih persentase kenaikan acak" 3. tambahkan offset
Setelah semua itu, Anda dapat melihat bahwa massa memberi Anda cara termudah dan paling umum untuk melakukannya menurut saya
double RandomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble ();
double RandomValue = Offset + (Range) * (randomVal antara 0.0-1.0)
sumber