Perhatikan bahwa pendekatan ini lebih bias dan kurang efisien daripada nextIntpendekatan, https://stackoverflow.com/a/738651/360211
Satu pola standar untuk mencapai ini adalah:
Min + (int)(Math.random() * ((Max - Min) + 1))
The Java Math fungsi library Math.random () menghasilkan nilai ganda dalam kisaran[0,1) . Perhatikan kisaran ini tidak termasuk 1.
Untuk mendapatkan rentang nilai tertentu terlebih dahulu, Anda perlu mengalikan dengan besarnya rentang nilai yang ingin Anda liput.
Math.random() * ( Max - Min )
Ini mengembalikan nilai dalam rentang [0,Max-Min) , di mana 'Max-Min' tidak termasuk.
Misalnya, jika Anda ingin [5,10), Anda harus mencakup lima nilai integer sehingga Anda gunakan
Math.random() * 5
Ini akan mengembalikan nilai dalam rentang [0,5) , di mana 5 tidak termasuk.
Sekarang Anda perlu menggeser rentang ini ke kisaran yang Anda targetkan. Anda melakukan ini dengan menambahkan nilai Min.
Min + (Math.random() * (Max - Min))
Anda sekarang akan mendapatkan nilai dalam rentang tersebut [Min,Max). Mengikuti contoh kita, itu berarti [5,10):
5 + (Math.random() * (10 - 5))
Tapi, ini masih belum termasuk Maxdan Anda mendapatkan nilai ganda. Untuk Maxmemasukkan nilai, Anda perlu menambahkan 1 ke rentang parameter Anda (Max - Min)dan kemudian memotong bagian desimal dengan melakukan casting ke int. Ini dicapai melalui:
Min + (int)(Math.random() * ((Max - Min) + 1))
Dan begitulah. Nilai integer acak dalam rentang [Min,Max], atau per contoh [5,10]:
5 + (int)(Math.random() * ((10 - 5) + 1))