המחלקה Random

מהי המחלקה Random?

Random היא מחלקה מובנית שמייצרת מספרים אקראיים. שימושית למשחקים, סימולציות, בדיקות, ועוד.

ייבוא

import java.util.Random;

יצירה

Random rand = new Random();

מספר שלם אקראי

מספר בטווח [0, n) - כולל 0, לא כולל n

int number = rand.nextInt(10);  // 0..9

מספר בטווח [min, max]

כדי לקבל מספר בין 1 ל-100 (כולל):

int number = rand.nextInt(100) + 1;  // 1..100

נוסחה כללית - מספר בטווח [min, max]:

int number = rand.nextInt(max - min + 1) + min;

מספר עשרוני אקראי

בין 0.0 ל-1.0 (לא כולל 1.0)

double number = rand.nextDouble();  // 0.0..0.999...

בטווח [min, max]

double number = rand.nextDouble() * (max - min) + min;

טיפוסים נוספים

float floatNum = rand.nextFloat();      // 0.0..1.0
long longNum = rand.nextLong();         // כל מספר long
boolean flag = rand.nextBoolean();      // true או false

דוגמה: הטלת קובייה

import java.util.Random;

public class Dice {
    public static void main(String[] args) {
        Random rand = new Random();

        for (int i = 0; i < 5; i++) {
            int roll = rand.nextInt(6) + 1;  // 1..6
            System.out.println("הטלה " + (i + 1) + ": " + roll);
        }
    }
}

דוגמה: משחק ניחוש מספר

import java.util.Random;
import java.util.Scanner;

public class GuessGame {
    public static void main(String[] args) {
        Random rand = new Random();
        Scanner scanner = new Scanner(System.in);

        int secret = rand.nextInt(100) + 1;
        int guess;
        int attempts = 0;

        System.out.println("ניחש מספר בין 1 ל-100:");

        do {
            guess = scanner.nextInt();
            attempts++;

            if (guess < secret) System.out.println("גדול יותר!");
            else if (guess > secret) System.out.println("קטן יותר!");
            else System.out.println("צדקת! מספר נסיונות: " + attempts);

        } while (guess != secret);

        scanner.close();
    }
}

Seed - זרע אקראיות

אפשר להעביר seed (זרע) ל-Random כדי לקבל תמיד את אותה סדרה אקראית. שימושי לבדיקות:

Random rand = new Random(42);  // seed קבוע
int a = rand.nextInt(100);     // תמיד יחזיר אותו מספר
int b = rand.nextInt(100);     // תמיד יחזיר אותו מספר

Math.random - חלופה פשוטה

אם אתם לא רוצים לייבא את Random, יש גם:

double number = Math.random();           // 0.0..1.0
int diceRoll = (int)(Math.random() * 6) + 1;  // 1..6

Math.random() משתמש ב-Random מתחת לפני השטח, אז בסופו של דבר זה אותו דבר.

מתי להשתמש בכל אחד

  • Random - כשצריך לייצר הרבה מספרים אקראיים, או שליטה על ה-seed
  • Math.random - לצורך מהיר, חד-פעמי, בלי לייבא שום דבר

בדקו את עצמכם

נסו לענות לבד לפני שאתם פותחים את התשובה.

  1. מה הטווח של random.nextInt(10)?

    1. כל מספר שלם
    2. 0 עד 10
    3. 1 עד 10
    4. 0 עד 9
    הצגת התשובה

    תשובה ד. nextInt(n) מחזיר מספר מ-0 ועד n-1, כלומר 0 עד 9.

  2. איך מקבלים מספר אקראי בין 1 ל-6 (קובייה)?

    1. random.nextInt(1, 6)
    2. random.nextInt(7)
    3. random.nextInt(6)
    4. random.nextInt(6) + 1
    הצגת התשובה

    תשובה ד. nextInt(6) נותן 0-5, ו-+1 מזיז ל-1-6.