فهم كيفية إنشاء رقم عشوائي بالجافا

مستوى الدرس: مبتدئ – لغة البرمجة: جافا (Java)

قد يواجه بعض الطلاب وخصوصاً المبتدئين في البرمجة صعوبة في فهم كيفية إنشاء رقم عشوائي خصوصاً ضمن مجال معين. مثال: قد يأتيك سؤال عن ما هو مجال الأرقام التي يستطيع أن ينشئها الكود التالي:

int x = 20 + (int)(Math.random() * 30);

ماذا سيكون جوابك؟ الجواب الصحيح هو أن الكود السابق سينتج أرقام بين 20 و 49.

هل يمكن معرفة الناتج عن طريق اجراء بعض الحسابات؟ بالتأكيد نعم. لنعرف في البداية ماهي حدود دالة Math.random(). الدالة تقوم بإنشاء رقم نوعه (double) أكبر من أو يساوي صفر وأصغر من 1. يعني (الرقم >= 0 و الرقم < 1). مثال على الأرقام التي تقوم بإنشائها هذه الدالة:

0.2045766903616716
0.37790106813735225
0.8582977478804686
0.9393936160319944

بمعرفة السابق، نستطيع أن نحسب الكود السابق بأقل قيمة تستطيع الدالة Math.random() إنشائها، ومرة أخرى نحسب الكود بأعلى قيمة تستطيع الدالة Math.random() إنشائها. أي سنحصل على المعادلتين التاليتين:

أقل قيمة (بتعويض مكان الدالة Math.random بصفر) = 20 ، تم حسابها كالتالي:

x = 20 + (int)(0 * 30);
X = 20 + (int)(0);
x = 20 + 0
x = 20

أعلى قيمة (بتعويض مكان الدالة Math.random برقم يكون أقل من 1 بنسبة بسيطة جداً، مثل 0.9999) = 49 ، تم حسابها كالتالي:

x = 20 + (int)(0.9999 * 30);
X = 20 + (int)(29.99);
x = 20 + 29
x = 49

بهذه الطريقة، عرفنا بسهولة مجال الأرقام التي يستطيع أن ينشئها الكود السابق. ونستطيع أن نقوم بإنشاء معادلة عامة لإنتاج رقم بين رقمين محددين كالتالي:

الرقم العشوائي = أدنى قيمة + (دالة إنشاء الرقم العشوائي * ( أعلى قيمة – أدنى قيمة + 1)

int x = min + (int)(Math.random() * (max - min + 1));

إثبات المعادلة السابقة بحساب اقل وأعلى قيمة تستطيع المعادلة إنشائها. نفترض أن قيمة المتغير (min) هو مثلاً 10، وقيمة متغير (max) هو 50. أي أننا نريد إنشاء رقم عشوائي بين 10 و 50.

أقل قيمة (بتعويض Math.random بصفر) = 10 ، تم حسابها كالتالي:

x = 10 + (int)(0 * (50 - 10 + 1));
x = 10 + (int)(0 * (40 + 1));
x = 10 + (int)(0 * 41);
x = 10 + (int)(0);
x = 10 + 0
x = 10

أعلى قيمة (بتعويض Math.random بـ 0.9999) = 50، تم حسابها كالتالي:

x = 10 + (int)(0.9999 * (50 - 10 + 1));
x = 10 + (int)(0.9999 * (40 + 1));
x = 10 + (int)(0.9999 * 41);
x = 10 + (int)(40.99);
x = 10 + 40
x = 50

بهذا فهمنا لماذا كتبنا المعادلة بالطريقة السابقة وخصوصاً زيادة واحد وطرح الرقم الصغير من الكبير. يمكن كتابة الدالة التالية في الجافا لسهولة إنشاء رقم عشوائي بين قيمتين فيما بعد:

public static int random(int min, int max) {
    return min + (int)(Math.random() * (max - min + 1));
}

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

تم أخذ صورة العرض من wallpaperbetter.com

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *