Ini adalah pertanyaan Java yang cukup sederhana (meskipun mungkin berlaku untuk semua pemrograman):
Math.random()
mengembalikan angka antara nol dan satu.
Jika saya ingin mengembalikan bilangan bulat antara nol dan seratus, saya akan lakukan:
(int) Math.floor(Math.random() * 101)
Antara satu dan seratus, saya akan melakukan:
(int) Math.ceil(Math.random() * 100)
Tetapi bagaimana jika saya ingin mendapatkan nomor antara tiga dan lima? Apakah akan seperti pernyataan berikut:
(int) Math.random() * 5 + 3
Aku tahu tentang nextInt()
di java.lang.util.Random
. Tapi saya ingin belajar bagaimana melakukan ini Math.random()
.
(int)Math.floor(Math.random()*3) + 3
Math.ceil
salah, itu memberikan hasil yang salah saatMath.random()
kembali0
.Jawaban:
Output
randomWithRange(2, 5)
10 kali:Batasannya inklusif, yaitu [2,5], dan
min
harus kurang darimax
pada contoh di atas.EDIT: Jika seseorang akan mencoba menjadi bodoh dan mundur
min
danmax
, Anda dapat mengubah kode menjadi:EDIT2: Untuk pertanyaan Anda tentang
double
s, hanya saja:Dan lagi jika Anda ingin membodohinya, itu hanya:
sumber
(int)
dan ingin mengembalikandouble
?int
dengandouble
s (dan typecast tidak perlu). Saya berasumsi Anda inginint
tetapi saya akan menambahkan ke posting saya.double
s hapus+ 1
juga karenaMath.random()
tidak terpotong. Namun, rentang akan menjadi [min, maks) karenaMath.random
"Mengembalikan nilai ganda dengan tanda positif, lebih besar dari atau sama dengan 0,0 dan kurang dari 1,0." Akan ada peluang yang sangat minim dari jumlah itumax
tetap saja, bahkan jika itu mungkin.Jika Anda ingin menghasilkan angka dari 0 hingga 100, maka kode Anda akan terlihat seperti ini:
Untuk menghasilkan angka dari 10 hingga 20:
Dalam kasus umum:
(di mana
lowerbound
inklusif danupperbound
eksklusif).Penyertaan atau pengecualian
upperbound
tergantung pada pilihan Anda. Katakanlahrange = (upperbound - lowerbound) + 1
kemudianupperbound
inklusif, tetapi jikarange = (upperbound - lowerbound)
kemudianupperbound
eksklusif.Contoh: Jika saya ingin bilangan bulat antara 3-5, maka jika rentang (5-3) +1 maka 5 inklusif, tetapi jika rentang hanya (5-3) maka 5 adalah eksklusif.
sumber
upperbound
eksklusif? Saya pikir ini akan inklusif.The
Random
kelas Java terletak dijava.util
paket akan melayani tujuan Anda yang lebih baik. Ini memiliki beberapanextInt()
metode yang mengembalikan bilangan bulat. Yang mengambil argumen int akan menghasilkan angka antara 0 dan int, yang terakhir tidak termasuk.sumber
Math.random()
. Terima kasih.Untuk menghasilkan angka antara 10 hingga 20 inklusif, Anda dapat menggunakan
java.util.Random
sumber
Berikut adalah metode yang menerima batas dan mengembalikan bilangan bulat acak. Ini sedikit lebih maju (sepenuhnya universal): batas bisa positif dan negatif , dan batas minimum / maksimum dapat datang dalam urutan apa pun.
Secara umum, ia menemukan jarak absolut antara perbatasan, mendapatkan nilai acak yang relevan, dan kemudian menggeser jawaban berdasarkan batas bawah.
sumber