หากคุณต้องการให้ 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;