การสร้างตัวเลขสุ่ม
Random และ ThreadLocalRandom
การสร้างตัวเลขสุ่ม เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
การสร้างตัวเลขสุ่ม
ความสุ่มมีบทบาทสำคัญในเกม การจำลอง และการสุ่มตัวอย่าง Java มี Math.random(), คลาส Random และ ThreadLocalRandom สำหรับโค้ดที่ทำงานพร้อมกัน
พื้นฐานของ Math.random
Math.random() จะส่งคืนค่าเลขทศนิยมในช่วง [0.0, 1.0) โดยรวมศูนย์และไม่รวมหนึ่ง
public class Main {
public static void main(String[] args) {
double r = Math.random();
System.out.println("Value between 0 and 1: " + r);
}
}การปรับสเกล Math.random
ให้คูณแล้วแปลงชนิดเพื่อสร้างช่วงจำนวนเต็ม (int)(Math.random() * 6) จะให้ค่าตั้งแต่ 0 ถึง 5
public class Main {
public static void main(String[] args) {
int roll = (int)(Math.random() * 6) + 1;
System.out.println("Dice: " + roll);
}
}คลาส Random
คลาส java.util.Random มีความยืดหยุ่นมากกว่า ให้สร้างอินสแตนซ์ก่อน แล้วเรียกใช้เมธอดอย่าง nextInt, nextDouble และ nextBoolean
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rng = new Random();
System.out.println(rng.nextBoolean());
System.out.println(rng.nextDouble());
}
}nextInt พร้อมขอบเขต
nextInt(bound) จะส่งคืนจำนวนเต็มตั้งแต่ 0 ซึ่งรวมอยู่ด้วย ไปจนถึง bound ซึ่งไม่รวมอยู่ด้วย ดังนั้น nextInt(6) จะให้ค่าตั้งแต่ 0 ถึง 5
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rng = new Random();
int value = rng.nextInt(100);
System.out.println("0 to 99: " + value);
}
}การกำหนดค่าเมล็ดสุ่มเพื่อให้ทำซ้ำได้
การส่งค่าเมล็ดสุ่มให้ตัวสร้างจะทำให้ลำดับค่ามีความแน่นอนเหมือนเดิม ค่าเมล็ดสุ่มเดียวกันจะสร้างตัวเลขชุดเดิมเสมอ คุณสมบัตินี้มีประโยชน์อย่างยิ่งสำหรับการทดสอบ
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rng = new Random(42);
System.out.println(rng.nextInt(1000));
System.out.println(rng.nextInt(1000));
}
}ค่าเมล็ดสุ่มเดียวกัน ลำดับเดียวกัน
ออบเจ็กต์ Random สองออบเจ็กต์ที่สร้างด้วยค่าเมล็ดสุ่มเดียวกันจะส่งคืนลำดับที่เหมือนกัน เหมาะสำหรับกรณีที่ต้องทำให้ข้อบกพร่องเกิดซ้ำอย่างแม่นยำ
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random a = new Random(7);
Random b = new Random(7);
System.out.println(a.nextInt(50) == b.nextInt(50));
}
}ThreadLocalRandom
ในโปรแกรมที่มีหลายเธรด การใช้ Random ร่วมกันเพียงหนึ่งอินสแตนซ์จะกลายเป็นคอขวด ส่วน ThreadLocalRandom.current() จะให้ตัวสร้างของตัวเองแก่แต่ละเธรด โดยไม่ต้องแย่งใช้ทรัพยากรกัน
import java.util.concurrent.ThreadLocalRandom;
public class Main {
public static void main(String[] args) {
int value = ThreadLocalRandom.current().nextInt(1, 7);
System.out.println("Dice: " + value);
}
}อย่าใช้ Random เดียวร่วมกันข้ามเธรด
อย่าส่งอินสแตนซ์ Random เดียวให้หลายเธรด เพราะอาจทำให้การกระจายค่าไม่ดีและเกิดการแย่งใช้ทรัพยากร ควรใช้ ThreadLocalRandom ในโค้ดที่ทำงานพร้อมกัน
เลขทศนิยมและการแจกแจงแบบปกติ
nextDouble() จะให้ค่าในช่วง [0,1) ส่วน nextGaussian() จะส่งคืนค่าจากการแจกแจงปกติที่มีค่าเฉลี่ย 0 และส่วนเบี่ยงเบนมาตรฐาน 1
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rng = new Random(1);
System.out.println(rng.nextDouble());
System.out.println(rng.nextGaussian());
}
}การเลือกเครื่องมือที่เหมาะสม
ใช้ Math.random() เมื่อต้องการเลขทศนิยมอย่างรวดเร็ว ใช้ Random เมื่อต้องการกำหนดขอบเขตหรือค่าเมล็ดสุ่ม และใช้ ThreadLocalRandom ในโค้ดที่ทำงานพร้อมกัน หากเป็นความสุ่มที่เกี่ยวข้องกับความปลอดภัย ให้ใช้ SecureRandom แทน
ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับความสุ่ม
ทบทวน
คุณได้เรียนรู้การสร้างตัวเลขสุ่มแล้ว
Math.random()ให้เลขทศนิยมในช่วง [0,1)Random.nextInt(bound)ให้ค่าตั้งแต่ 0 ถึงค่าขอบเขตลบ 1- ค่าเมล็ดสุ่มทำให้สามารถสร้างลำดับเดิมซ้ำได้
ThreadLocalRandomเป็นตัวเลือกที่ปลอดภัยสำหรับการทำงานพร้อมกัน
คำถามที่พบบ่อย
บทเรียน “การสร้างตัวเลขสุ่ม” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสร้างตัวเลขสุ่ม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสร้างตัวเลขสุ่ม”
Random และ ThreadLocalRandom คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การสร้างตัวเลขสุ่ม” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม
ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คลาส Math
- การสร้างตัวเลขสุ่ม
- ช่วงสุ่มและการสับเปลี่ยน
- การปัดเศษและขีดจำกัดทางคณิตศาสตร์