النطاقات العشوائية والخلط
أعداد عشوائية محددة النطاق وخلط المجموعات
النطاقات العشوائية والخلط درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.
النطاقات والخلط
نادرًا ما تريد البرامج الفعلية القيم من 0 إلى bound-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);
}
}أعداد عشرية عشوائية ضمن نطاق
للحصول على قيمة double من 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);
}
}خلط مصفوفة
لا تحتوي المصفوفات على دالة خلط مضمّنة. والأسلوب التقليدي هو خوارزمية Fisher-Yates: بدّل كل عنصر مع فهرس عشوائي سابق أو مساوٍ له.
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);
}
}ملاحظات عملية
استخدم الخلط عندما تحتاج إلى إعادة ترتيب عشوائية كاملة، واستخدم صيغة نطاق مخصّصة عندما تحتاج إلى قيم محدودة. وتذكّر دائمًا خطأ off-by-one عندما يجب أن يكون الحد الأعلى شاملًا.
اختبار سريع
اختبر مدى فهمك للنطاقات والخلط.
مراجعة
لقد تعلّمت النطاقات والخلط.
- استخدم
min + nextInt(max - min + 1)أوnextInt(origin, bound)للنطاقات. - يعيد
Collections.shuffleترتيب قائمة قابلة للتغيير في موضعها. - هيّئ الخلط ببذرة لضمان قابلية إعادة الإنتاج.
- اختر العناصر العشوائية باستخدام فهرس عشوائي.
الأسئلة الشائعة
هل درس «النطاقات العشوائية والخلط» مجاني؟
نعم — نص درس «النطاقات العشوائية والخلط» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.
ماذا ستتعلم في «النطاقات العشوائية والخلط»؟
أعداد عشوائية محددة النطاق وخلط المجموعات تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «النطاقات العشوائية والخلط»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الفئة Math
- توليد الأعداد العشوائية
- النطاقات العشوائية والخلط
- التقريب والحدود في Math