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

ช่วงสุ่มและการสับเปลี่ยน

ค่าสุ่มแบบมีขอบเขตและการสับเปลี่ยนคอลเลกชัน

ช่วงสุ่มและการสับเปลี่ยน เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

ช่วงค่าและการสับเปลี่ยน

โปรแกรมจริงแทบไม่ต้องการเพียงช่วง 0 ถึงค่าขอบเขตลบ 1 บทเรียนนี้ครอบคลุมการสร้างช่วงค่าตามต้องการ การสับเปลี่ยนรายการแบบสุ่ม และการเลือกสมาชิกแบบสุ่ม

สูตรกำหนดช่วงแบบกำหนดเอง

หากต้องการสร้างจำนวนเต็มตั้งแต่ min ถึง max โดยรวมค่าทั้งสองขอบเขต ให้ใช้ min + rng.nextInt(max - min + 1)

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random();
        int min = 10, max = 20;
        int value = min + rng.nextInt(max - min + 1);
        System.out.println("10 to 20: " + value);
    }
}

nextInt พร้อมจุดเริ่มต้นและขอบเขต

Java รุ่นใหม่ให้คุณเรียกใช้ nextInt(origin, bound) ได้โดยตรง โดยรวม origin และไม่รวม bound วิธีนี้ช่วยหลีกเลี่ยงการเขียนสูตรด้วยตนเอง

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random();
        int value = rng.nextInt(10, 21);
        System.out.println("10 to 20: " + value);
    }
}

เลขทศนิยมสุ่มในช่วง

หากต้องการเลขทศนิยมตั้งแต่ lo ถึง hi ให้ใช้ lo + rng.nextDouble() * (hi - lo)

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random();
        double lo = 5.0, hi = 7.5;
        double value = lo + rng.nextDouble() * (hi - lo);
        System.out.println(value);
    }
}

การสับเปลี่ยนรายการ

Collections.shuffle(list) จะจัดลำดับสมาชิกของ List ใหม่แบบสุ่มโดยแก้ไขรายการเดิม เหมาะสำหรับสำรับไพ่และแบบทดสอบที่สุ่มลำดับ

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> deck = new ArrayList<>(List.of(1, 2, 3, 4, 5));
        Collections.shuffle(deck);
        System.out.println(deck);
    }
}

การสับเปลี่ยนที่ทำซ้ำได้

ส่ง Random ที่กำหนดค่าเมล็ดสุ่มไว้เป็นอาร์กิวเมนต์ตัวที่สอง เพื่อให้ได้การสับเปลี่ยนที่แน่นอนเหมือนเดิม เช่น Collections.shuffle(list, new Random(seed))

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        List<Integer> deck = new ArrayList<>(List.of(1, 2, 3, 4, 5));
        Collections.shuffle(deck, new Random(99));
        System.out.println(deck);
    }
}

การสับเปลี่ยนต้องใช้รายการที่เปลี่ยนแปลงได้

List.of(...) จะสร้างรายการที่เปลี่ยนแปลงไม่ได้ การสับเปลี่ยนรายการนี้จะโยน UnsupportedOperationException ให้ครอบรายการด้วย new ArrayList<>(...) ก่อน

การเลือกสมาชิกแบบสุ่ม

เลือกสมาชิกแบบสุ่มได้โดยสร้างดัชนีสุ่ม แล้วใช้ get

import java.util.List;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        List<String> colors = List.of("red", "green", "blue");
        Random rng = new Random();
        String pick = colors.get(rng.nextInt(colors.size()));
        System.out.println("Chosen: " + pick);
    }
}

การสับเปลี่ยนอาร์เรย์

อาร์เรย์ไม่มีการสับเปลี่ยนในตัว วิธีมาตรฐานคืออัลกอริทึมฟิชเชอร์–เยตส์ ซึ่งจะสลับสมาชิกแต่ละตัวกับดัชนีก่อนหน้าหรือดัชนีเดียวกันที่เลือกแบบสุ่ม

import java.util.Arrays;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        Random rng = new Random(3);
        for (int i = arr.length - 1; i > 0; i--) {
            int j = rng.nextInt(i + 1);
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
        System.out.println(Arrays.toString(arr));
    }
}

การสุ่มตัวอย่าง

หากต้องการเลือกหลายรายการที่ไม่ซ้ำกัน ให้สับเปลี่ยนสำเนาแล้วเลือกสมาชิกสองสามตัวแรก หรือใช้ Set เพื่อติดตามดัชนีที่เลือกไปแล้ว สำหรับรายการขนาดเล็ก การสับเปลี่ยนแล้วตัดเอาบางส่วนเป็นวิธีที่ง่ายที่สุด

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> pool = new ArrayList<>(List.of(1, 2, 3, 4, 5, 6, 7, 8));
        Collections.shuffle(pool);
        List<Integer> sample = pool.subList(0, 3);
        System.out.println("Sample: " + sample);
    }
}

ข้อควรรู้ในการใช้งานจริง

ให้สับเปลี่ยนเมื่อคุณต้องการจัดลำดับใหม่ทั้งหมดแบบสุ่ม และใช้สูตรกำหนดช่วงแบบกำหนดเองเมื่อต้องการค่าที่อยู่ในขอบเขต อย่าลืมระวังความคลาดเคลื่อนหนึ่งตำแหน่งเมื่อขอบเขตบนควรรวมอยู่ด้วย

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจของคุณเกี่ยวกับช่วงค่าและการสับเปลี่ยน

ทบทวน

คุณได้เรียนรู้เรื่องช่วงค่าและการสับเปลี่ยนแล้ว

  • ใช้ min + nextInt(max - min + 1) หรือ nextInt(origin, bound) สำหรับสร้างช่วงค่า
  • Collections.shuffle จะจัดลำดับรายการที่เปลี่ยนแปลงได้ใหม่โดยแก้ไขรายการเดิม
  • กำหนดค่าเมล็ดสุ่มให้การสับเปลี่ยนเพื่อให้ทำซ้ำได้
  • เลือกสมาชิกแบบสุ่มผ่านดัชนีสุ่ม

คำถามที่พบบ่อย

บทเรียน “ช่วงสุ่มและการสับเปลี่ยน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ช่วงสุ่มและการสับเปลี่ยน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ช่วงสุ่มและการสับเปลี่ยน”

ค่าสุ่มแบบมีขอบเขตและการสับเปลี่ยนคอลเลกชัน คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “ช่วงสุ่มและการสับเปลี่ยน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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