توليد الأرقام العشوائية في Java ضمن نطاق محدد: دليل تعليمي

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

الأرقام العشوائية في Java: من الفوضى إلى النظام

\n\n

مرحبًا، أيها المبرمج المستقبلي بلغة Java! إذا كنت قد كتبت يومًا ألعابًا أو محاكيات أو اختبارات أو أردت ببساطة إضافة عنصر المفاجأة إلى برنامجك، فمن المؤكد أنك واجهت الحاجة إلى الحصول على عدد صحيح عشوائي ضمن نطاق محدد. قد يبدو الأمر بسيطًا، لكن في الواقع، كثيرًا ما يسأل المبتدئون: "لماذا أحصل على أرقام من 0 إلى 100 وليس من 50 إلى 100؟" أو "لماذا يظهر خطأ في الكود الخاص بي؟".

\n\n

اليوم سنشرح هذا الموضوع مرة واحدة وإلى الأبد. ستتعلم كيفية توليد رقم عشوائي في Java في أي نطاق باستخدام ثلاث طرق رئيسية. مفاجأة: إحداها هي الخيار الأفضل لـ 90% من الحالات. هيا بنا!

\n\n

لماذا هذا مهم؟

\n

توليد الأرقام العشوائية مهمة أساسية ولكنها بالغة الأهمية. لا يمكن الاستغناء عنها عند:

\n
    \n
  • إنشاء بيانات اختبارية (مثل معرفات المستخدمين).
  • \n
  • تنفيذ آليات الألعاب (سقوط العناصر، توليد المستويات).
  • \n
  • محاكاة العمليات العشوائية (قوائم الانتظار، حركة المرور).
  • \n
  • اختيار عنصر عشوائي من قائمة.
  • \n
\n\n

بإتقان هذا الموضوع، ستتوقف عن الخوف من "السحر" في الكود وستتمكن من التحكم في العشوائية بثقة.

\n\n

الطريقة رقم 1: الكلاسيكية — java.util.Random

\n

هذا هو جد جميع المولدات في Java. فئة java.util.Random موجودة منذ الإصدارات المبكرة جدًا ولا تزال تُستخدم بنشاط. ميزتها الرئيسية هي تعدد الاستخدامات.

\n\n

كيفية الحصول على int عشوائي من 0 إلى N؟

\n

الطريقة nextInt(int bound) تُرجع رقمًا عشوائيًا من 0 (شاملًا) إلى bound (غير شامل). أي إذا كتبت nextInt(10)، ستحصل على رقم من 0 إلى 9.

\n\n
import java.util.Random;\n\npublic class RandomExample {\n    public static void main(String[] args) {\n        Random random = new Random();\n        int number = random.nextInt(10); // 0..9\n        System.out.println("الرقم العشوائي: " + number);\n    }\n}
\n\n

ماذا عن جعله من 5 إلى 15؟

\n

هنا يكمن السر الرئيسي. للحصول على رقم في نطاق عشوائي [min, max]، يجب استخدام الصيغة:

\n

min + random.nextInt(max - min + 1)

\n

لنشرح بمثال: النطاق من 5 إلى 15.

\n
    \n
  • max - min + 1 = 15 - 5 + 1 = 11. إذًا nextInt(11) سيعطي أرقامًا من 0 إلى 10.
  • \n
  • نضيف min (5): نحصل على النطاق 5..15.
  • \n
\n

نتحقق: إذا أعاد nextInt(11) القيمة 0، فإن 0+5 = 5. إذا أعاد 10، فإن 10+5 = 15. مثالي!

\n\n
Random random = new Random();\nint min = 5;\nint max = 15;\nint randomNumber = min + random.nextInt(max - min + 1);\nSystem.out.println("رقم عشوائي من 5 إلى 15: " + randomNumber);
\n\n

هام: لا تنسَ +1! بدونه ستكون القيمة القصوى أقل بمقدار 1.

\n\n

الطريقة رقم 2: النهج الحديث — ThreadLocalRandom

\n

بدءًا من Java 7، ظهرت فئة ThreadLocalRandom. وهي مصممة خصيصًا للتطبيقات متعددة الخيوط (ولكنها تعمل بشكل ممتاز أيضًا في التطبيقات أحادية الخيط). الميزة الرئيسية هي أنها أسرع من Random ولا تتطلب إنشاء كائن منفصل.

\n\n

الاستخدام في الكود أحادي الخيط

\n

لديها طريقة ملائمة nextInt(int origin, int bound) التي تقبل مباشرة حدود النطاق! لاحظ: origin شامل، bound غير شامل. إذا كنت بحاجة إلى تضمين الحد الأعلى أيضًا، فقط أضف +1.

\n\n
import java.util.concurrent.ThreadLocalRandom;\n\npublic class ThreadLocalRandomExample {\n    public static void main(String[] args) {\n        // رقم من 5 إلى 15 (شاملًا)\n        int randomNumber = ThreadLocalRandom.current().nextInt(5, 16);\n        System.out.println("الرقم العشوائي: " + randomNumber);\n    }\n}
\n\n

أترى كم هو بسيط؟ لا حاجة لأي صيغ،

المدونات

توصيات الكتب