หากคุณต้องการให้ pseudorandom ยาวกระจายสม่ำเสมอในช่วง [0, m
) ให้ลองใช้ตัวดำเนินการโมดูโลและวิธีค่าสัมบูรณ์รวมกับnextLong()
วิธีการดังที่แสดงด้านล่าง:
Math.abs(rand.nextLong()) % m;
rand
วัตถุสุ่มของคุณอยู่ที่ไหน
ตัวดำเนินการโมดูโลหารสองตัวเลขและส่งออกส่วนที่เหลือของตัวเลขเหล่านั้น ยกตัวอย่างเช่น3 % 2
เป็น1
เพราะที่เหลือของ 3 และ 2 เป็น 1
เนื่องจากnextLong()
สร้าง pseudorandom ที่มีการกระจายอย่างสม่ำเสมอในช่วง [- (2 ^ 48), 2 ^ 48) (หรือที่ไหนสักแห่งในช่วงนั้น) คุณจะต้องใช้ค่าสัมบูรณ์ของมัน หากไม่เป็นเช่นนั้นโมดูโลของnextLong()
เมธอดมีโอกาส 50% ที่จะส่งคืนค่าลบซึ่งอยู่นอกช่วง [0, m
)
สิ่งที่คุณร้องขอในตอนแรกคือ pseudorandom ที่กระจายอย่างสม่ำเสมอในช่วง [0,100) รหัสต่อไปนี้ทำเช่นนั้น:
Math.abs(rand.nextLong()) % 100;