ช่วงสุ่มและการสับเปลี่ยน
ค่าสุ่มแบบมีขอบเขตและการสับเปลี่ยนคอลเลกชัน
ช่วงสุ่มและการสับเปลี่ยน เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คลาส Math
- การสร้างตัวเลขสุ่ม
- ช่วงสุ่มและการสับเปลี่ยน
- การปัดเศษและขีดจำกัดทางคณิตศาสตร์