מחולל מספרים אקראיים ב-Java

היום נסתכל על איך ליצור מספר אקראי ב-Java. לעיתים קרובות נצטרך ליצור מספרים אקראיים בתוכניות Java. לדוגמה, משחק קוביות או ליצירת מזהה מפתח אקראי עבור הצפנה וכו '.

מחולל מספרים אקראיים ב-Java

קיימות הרבה דרכים ליצירת מספר אקראי ב-Java.

  1. המחלקה java.util.Random ניתן להשתמש בה כדי ליצור מספרים אקראיים. היא מספקת מספר שיטות ליצירת מספרים שלמים, מספרים ארוכים, מספרים עשרוניים וכו '.
  2. ניתן גם להשתמש ב-Math.random() כדי ליצור מספר עשרוני. שיטה זו משתמשת בפנימיות במחלקת Java Random.
  3. יש להשתמש במחלקת java.util.concurrent.ThreadLocalRandom כדי ליצור מספר אקראי בסביבת רצפי תהליך. מחלקה זו היא חלק מחבילת Java Concurrent והוצגה ב-Java 1.7. למחלקה זו יש שיטות דומות למחלקת Java Random.
  4. ניתן להשתמש במחלקת java.security.SecureRandom כדי ליצור מספר אקראי עם אבטחה חזקה. מחלקה זו מספקת מחולל מספרים אקראיים קריפטוגרפי חזק. אך היא איטית בעיבוד. לכן, תלוי בדרישות היישום שלך, עליך להחליט האם להשתמש בה או לא.

מחולל מספרים אקראיים ב-Java

בואו נסתכל על כמה דוגמאות ליצירת מספר אקראי ב-Java. מאוחר יותר, נסתכל גם על תכנית דוגמה של ThreadLocalRandom ו־SecureRandom.

1. ליצור מספר שלם אקראי

Random random = new Random();

int rand = random.nextInt();

כן, זה כל כך פשוט ליצור מספר שלם אקראי ב-Java. כאשר אנו יוצרים את ההופכן Random, הוא יוצר ערך זריקה ארוך שמשמש בכל שיחות השיטה nextXXX. אנו יכולים להגדיר ערך זה של זריקה בתוכנית, אך זה אינו נדרש ברוב המקרים.

//קביעת ערך זריקה ארוך באמצעות בונה ה-Random
Random random = new Random(123456789);

//קביעת ערך זריקה ארוך באמצעות שיטת הקביעה
Random random1 = new Random();
random1.setSeed(1234567890);

2. מספר אקראי ב-Java בין 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 class. הכמות של בתים אקראיים שיוצרו היא שווה לאורך המערך של בתים.

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 יש שיטות דומות גם ליצירת מספרים אקראיים באורך long ו-double.

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