Angka acak dengan Math.random() di Java

Untuk menghasilkan angka acak, saya menggunakan rumus:

(int)(Math.random() * max) + min

Rumus yang saya temukan di Google sepertinya selalu seperti itu:

(int)(Math.random() * (max - min) + min)

Yang mana yang benar? Sejauh yang saya tahu, saya tidak pernah mendapatkan angka yang berada di luar jangkauan saya dengan rumus saya

Pendekatan yang lebih baik adalah:

int x = rand.nextInt(max - min + 1) + min;

Rumus Anda menghasilkan angka antara min dan min + max.

Random random = new Random(1234567);
int min = 5;
int max = 20;
while (true) {
    int x = (int)(Math.random() * max) + min;
    System.out.println(x);
    if (x < min || x >= max) { break; }
}       

Hasil:

10
16
13
21 // Oops!!

Lihat secara online di sini: ideone

Komentar (0)

Milik Anda: Kemungkinan terendah adalah min, kemungkinan tertinggi adalah max+min-1

Google: Kemungkinan terendah adalah min, kemungkinan tertinggi adalah max-1

Komentar (2)

Yang pertama menghasilkan angka dalam kisaran yang salah, sedangkan yang kedua benar.

Untuk menunjukkan bahwa yang pertama salah, katakanlah min adalah 10 dan max adalah 20. Dengan kata lain, hasilnya diharapkan lebih besar dari atau sama dengan sepuluh, dan sangat kurang dari dua puluh. Jika Math.random() mengembalikan 0.75, hasil dari rumus pertama adalah 25, yang berada di luar jangkauan.

Komentar (0)