Java רנדום

מחלקת Java Random משמשת ליצירת סדרה של מספרים אקראיים.

מחלקת Java Random

  • מחלקת Random היא חלק מחבילת java.util.
  • מופע של מחלקת java Random משמש ליצירת מספרים אקראיים.
  • מחלקה זו מספקת מספר שיטות ליצירת מספרים אקראיים מסוג integer, double, long, float וכו'.
  • אלגוריתם יצירת המספרים האקראיים פועל על ערך הזרע. אם לא סופק, ערך הזרע נוצר מזמן הננו של המערכת.
  • אם שני מופעים של Random יש ערך זרע זהה, אז הם יייצרו את אותו סדר של מספרים אקראיים.
  • מחלקת Java Random היא thread-safe, אך בסביבה רב-תהליכית מומלץ להשתמש במחלקת java.util.concurrent.ThreadLocalRandom.
  • מופעים של מחלקת Random אינם מתאימים ליישומים רגישים לאבטחה, עדיף להשתמש בjava.security.SecureRandom במקרים אלה.

בנאים של Java Random

למחלקת Java Random יש שני בנאים שניתנים למטה:

  1. Random(): יוצר מחולל אקראי חדש
  2. Random(long seed): יוצר מחולל אקראי חדש באמצעות זרע מסוים

שיטות כיתת Random ב-Java

בואו נצפה בכמה מהשיטות של כיתת Random ב-Java.

  1. nextBoolean(): שיטה זו מחזירה ערך בוליאני פסאודואימי המייצג ערך בוליאני מהרצף של מחולל המספרים האקראיים.
  2. nextDouble(): שיטה זו מחזירה ערך פסאודואימי המייצג ערך דאבל בין 0.0 ל-1.0.
  3. nextFloat(): שיטה זו מחזירה ערך פסאודואימי המייצג ערך פלוט בין 0.0 ל-1.0.
  4. nextInt(): שיטה זו מחזירה ערך int הבא מרצף מחולל המספרים האקראיים.
  5. nextInt(int n): שיטה זו מחזירה ערך פסאודואימי מסוג int בין 0 לערך המסופק מראש מרצף מחולל המספרים האקראיים.

דוגמה ל-Java Random

בואו נצפה בתכנית הדוגמה ל-Java Random הבאה.

package com.journaldev.examples;

import java.util.Random;

/**
 * Java Random Number Example Program
 * 
 */
public class RandomNumberExample {

	public static void main(String[] args) {
		
		//אתחול מחולל מספרים אקראיים
		Random random = new Random();
		
		//יוצר ערך בוליאני
		System.out.println(random.nextBoolean());
		
		//יוצר ערך דאבל
		System.out.println(random.nextDouble());
		
		//יוצר ערך פלוט
		System.out.println(random.nextFloat());
		
		//יוצר ערך int
		System.out.println(random.nextInt());
		
		//יוצר ערך int within specific limit
		System.out.println(random.nextInt(20));

	}

}

פלט התכנית לעיל הוא:

false
0.30986869120562854
0.6210066
-1348425743
18

בדוק את הפוסט הזה למידע נוסף על הדור של מספרים אקראיים ב-Java.

הפקת מספר אקראי באמצעות זרע

קיימות שני דרכים ליצור מספר אקראי באמצעות זרע.

Random random = new Random(long seed);
                         
Random random1 = new Random();
random1.setSeed(seed);

הזרע הוא הערך ההתחלתי של המצב הפנימי של היוצר מספרים אקראיים שמתווך על ידי השיטה next(int).

package com.journaldev.examples;

import java.util.Random;

/**
 * Java Random Number Using Seed Example Program
 * 
 * @author pankaj
 *
 */
public class RadomSeedExample {

	public static void main(String[] args) {
		
		//באמצעות בנאי
		Random random = new Random(100);
		System.out.println("Using Constructor");
		System.out.println(random.nextInt());
		
		//באמצעות שיטה
		Random random2 = new Random();
		random2.setSeed(200);
		System.out.println("Using Method");
		System.out.println(random2.nextInt());
	}
}

הפלט של התוכנית לעיל הוא:

Using Constructor
-1193959466
Using Method
-1133938638

מה קורה אם אנו מעבירים אותו זרע לשני מחוללי מספרים אקראיים שונים? בואו נסתכל על התוכנית למטה ונראה מה קורה אם אנו מעבירים אותו זרע לשני מחוללי מספרים אקראיים שונים.

package com.journaldev.examples;

import java.util.Random;

/**
 * Java Random Number Using Same Seed Example Program
 * 
 */
public class RandomNumberSameSeedExample {

	public static void main(String[] args) {
		
		//אתחול שני מחוללי מספרים אקראיים באמצעות זרע זהה
		Random random1 = new Random(100);
		Random random2 = new Random(100);
		
		System.out.println(random1.nextInt());
		System.out.println(random2.nextInt());

	}

}

הפלט של התוכנית לעיל הוא:

-1193959466
-1193959466

אנו רואים שהיא תפיק את אותו מספר אקראי אם נעביר את אותו זרע לשני מחוללי מספרים אקראיים שונים.

שיטות של מחלקת Random ב-Java 8

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

package com.journaldev.random;

import java.util.Random;
import java.util.stream.IntStream;

public class JavaRandomExample {

	public static void main(String[] args) {

		Random random = new Random();

		// יצירת זרם של 5 מספרים בין 1 ל-100
		IntStream ints = random.ints(5, 1, 100);

		ints.forEach(System.out::println);
	}

}

זהו כל הסיכום המהיר על מחלקת Random ב-Java. התייחסות: מסמך ה- API

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