0Pricing
Java Academy · บทเรียน

การสร้างตัวเลขสุ่ม

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คลาส Math
  2. การสร้างตัวเลขสุ่ม
  3. ช่วงสุ่มและการสับเปลี่ยน
  4. การปัดเศษและขีดจำกัดทางคณิตศาสตร์
← กลับไปที่ Java Academy