Jawaban:
Untuk menghasilkan nilai acak antara rangeMin
dan rangeMax
:
Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
rangeMin
dan rangeMax
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:
double random = ThreadLocalRandom.current().nextDouble(min, max);
nextDouble
akan mengembalikan nilai ganda pseudorandom antara minimum (inklusif) dan maksimum (eksklusif). Batas belum tentu int
, dan bisa double
.
Gunakan ini:
double start = 400;
double end = 402;
double random = new Random().nextDouble();
double result = start + (random * (end - start));
System.out.println(result);
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.
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.
}
}
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)
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()
.