0Pricing
Java Academy · درس

توليد الأعداد العشوائية

Random وThreadLocalRandom

توليد الأعداد العشوائية درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.

توليد أرقام عشوائية

تُستخدم العشوائية في الألعاب والمحاكاة وأخذ العينات. توفر Java الدالة Math.random()، وفئة Random، وThreadLocalRandom للتعليمات البرمجية المتزامنة.

أساسيات Math.random

تعيد Math.random() قيمة من النوع double ضمن النطاق [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() للحصول على قيمة double بسرعة، وRandom عندما تحتاج إلى حدود أو بذرة، وThreadLocalRandom في التعليمات البرمجية المتزامنة. أما للعشوائية ذات المتطلبات الأمنية، فاستخدم SecureRandom بدلًا من ذلك.

اختبار سريع

اختبر مدى فهمك للعشوائية.

مراجعة

لقد تعلّمت كيفية توليد أرقام عشوائية.

  • تعطي Math.random() قيمة double ضمن [0,1).
  • تعطي Random.nextInt(bound) القيم من 0 إلى bound-1.
  • تجعل البذرة التسلسلات قابلة لإعادة الإنتاج.
  • يُعد ThreadLocalRandom الخيار الآمن للتعليمات البرمجية المتزامنة.

الأسئلة الشائعة

هل درس «توليد الأعداد العشوائية» مجاني؟

نعم — نص درس «توليد الأعداد العشوائية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.

ماذا ستتعلم في «توليد الأعداد العشوائية»؟

Random وThreadLocalRandom تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «توليد الأعداد العشوائية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الفئة Math
  2. توليد الأعداد العشوائية
  3. النطاقات العشوائية والخلط
  4. التقريب والحدود في Math
← العودة إلى Java Academy