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

اليوم سنلقي نظرة على كيفية توليد رقم عشوائي في لغة البرمجة جافا. في بعض الأحيان نحتاج إلى توليد أرقام عشوائية في برامج جافا. على سبيل المثال، في لعبة النرد أو لتوليد معرف مفتاح عشوائي للتشفير، وما إلى ذلك.

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

هناك العديد من الطرق لتوليد رقم عشوائي في جافا.

  1. يمكن استخدام فئة java.util.Random لإنشاء أرقام عشوائية. تقدم عدة طرق لتوليد أعداد صحيحة عشوائية، طويلة، مزدوجة، إلخ.
  2. يمكننا أيضًا استخدام Math.random() لتوليد رقم عشوائي من نوع double. تستخدم هذه الطريقة داخليًا فئة Java Random.
  3. يجب استخدام فئة java.util.concurrent.ThreadLocalRandom لتوليد رقم عشوائي في بيئة متعددة الخيوط. تعتبر هذه الفئة جزءًا من حزمة Java Concurrent وتمت إضافتها في جافا 1.7. تحتوي هذه الفئة على طرق مماثلة لفئة Java Random.
  4. يمكن استخدام java.security.SecureRandom لتوليد رقم عشوائي بأمان قوي. توفر هذه الفئة مولد رقم عشوائي قوي من الناحية التشفيرية. ومع ذلك، فإنها بطيئة في المعالجة. لذا يجب عليك، استنادًا إلى متطلبات تطبيقك، أن تقرر ما إذا كنت ستستخدمها أم لا.

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

لنلقِ نظرة على بعض الأمثلة لتوليد رقم عشوائي في جافا. في وقت لاحق، سنلقي أيضًا نظرة على برنامج مثالي لـ ThreadLocalRandom و SecureRandom.

1. توليد عدد صحيح عشوائي

Random random = new Random();

int rand = random.nextInt();

نعم، من السهل جدًا توليد عدد صحيح عشوائي في جافا. عند إنشاء مثيل Random، يتم توليد قيمة بذرية طويلة تُستخدم في جميع استدعاءات الطريقة nextXXX. يمكننا تعيين قيمة البذرة هذه في البرنامج، ومع ذلك، ليست مطلوبة في معظم الحالات.

// قم بتعيين قيمة البذرة الطويلة باستخدام مُنشئ Random
Random random = new Random(123456789);

// قم بتعيين قيمة البذرة الطويلة باستخدام طريقة الضبط
Random random1 = new Random();
random1.setSeed(1234567890);

2. رقم عشوائي في جافا بين 1 و 10

أحيانًا يجب علينا توليد رقم عشوائي بين نطاق معين. على سبيل المثال، في لعبة النرد القيم الممكنة يمكن أن تكون بين 1 و 6 فقط. فيما يلي الشيفرة التي تُظهر كيفية توليد رقم عشوائي بين 1 و 10 بما في ذلك الحدود.

Random random = new Random();
int rand = 0;
while (true){
    rand = random.nextInt(11);
    if(rand !=0) break;
}
System.out.println(rand);

تم استبعاد الوسيط في nextInt(int x)، لذا يجب علينا توفير الوسيط كـ 11. أيضًا، يتم تضمين القيمة 0 في الرقم العشوائي المولد، لذا يجب علينا الاستمرار في استدعاء طريقة nextInt حتى نحصل على قيمة بين 1 و 10. يمكنك توسيع الشيفرة أعلاه لتوليد الرقم العشوائي داخل أي نطاق معين.

3. توليد عدد عشوائي من النوع double

يمكننا استخدام Math.random() أو طريقة nextDouble في فئة Random لتوليد عدد عشوائي من النوع double في لغة البرمجة جافا.

Random random = new Random();

double d = random.nextDouble();

double d1 = Math.random();

4. توليد عدد عشوائي من النوع float

Random random = new Random();

float f = random.nextFloat();

5. توليد عدد عشوائي من النوع long

Random random = new Random();

long l = random.nextLong();

6. توليد قيمة عشوائية من النوع boolean

Random random = new Random();

boolean flag = random.nextBoolean();

7. إنشاء مصفوفة بايت عشوائية

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

Random random = new Random();

byte[] randomByteArray = new byte[5];

random.nextBytes(randomByteArray);

System.out.println(Arrays.toString(randomByteArray)); // sample output [-70, -57, 74, 99, -78]

8. ThreadLocalRandom في بيئة متعددة الخيوط

فيما يلي مثال بسيط يوضح استخدام ThreadLocalRandom في بيئة متعددة الخيوط.

package com.journaldev.randomnumber;

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

public class ThreadLocalRandomExample {

	public static void main(String[] args) {
		Runnable runnable = new MyRunnable();

		for (int i = 0; i < 5; i++) {
			Thread t = new Thread(runnable);
			t.setName("MyRunnable-Thread-" + i);
			t.start();
		}
	}

}

class MyRunnable implements Runnable {

	@Override
	public void run() {
		String threadName = Thread.currentThread().getName();
		System.out.println(threadName + "::" + ThreadLocalRandom.current().nextInt());
	}

}

أدناه هو مخرجات عينة لتنفيذ البرنامج أعلاه.

MyRunnable-Thread-0::-1744088963
MyRunnable-Thread-3::139405798
MyRunnable-Thread-1::1403710182
MyRunnable-Thread-2::-1222080205
MyRunnable-Thread-4::-185825276

لا يمكننا تعيين قيمة بذرة لمثيل ThreadLocalRandom، سيقوم برمي استثناء UnsupportedOperationException. الفئة ThreadLocalRandom لديها أيضًا بعض الطرق الفائضة لإنشاء رقم عشوائي ضمن نطاق معين. على سبيل المثال، لإنشاء رقم عشوائي بين 1 و 10، يمكننا القيام بذلك كما يلي.

ThreadLocalRandom random = ThreadLocalRandom.current();
		
int rand = random.nextInt(1, 11);

تحتوي فئة ThreadLocalRandom أيضًا على طرق مماثلة لإنشاء قيم عشوائية طويلة ومزدوجة.

9. مثال على SecureRandom

يمكنك استخدام فئة SecureRandom لتوليد أرقام عشوائية أكثر أمانًا باستخدام أي من مقدمي الخدمة المدرجين. الكود المثالي السريع لمثال SecureRandom معروض أدناه.

Random random = new SecureRandom();

int rand = random.nextInt();

System.out.println(rand);

هذا كل شيء عن توليد رقم عشوائي في برنامج Java.

يمكنك تحميل الكود المثالي من مستودعنا على مستودع GitHub.

Source:
https://www.digitalocean.com/community/tutorials/random-number-generator-java