Math.random în Java

Returnează un număr aleatoriu double, mai mare sau egal cu 0.0 și strict mai mic decât 1.0.

Sintaxă
static double random()

Ce face Math.random

Math.random() returnează un double aleatoriu în intervalul [0.0, 1.0). Pentru un întreg între min și max (inclusiv) se folosește formula min + (int) (Math.random() * (max - min + 1)).

În spate, metoda folosește un singur obiect java.util.Random comun. Pentru cod nou este mai simplu ThreadLocalRandom.current().nextInt(min, max + 1) sau un Random propriu. Un new Random(seed) cu seed fix produce mereu aceeași secvență, util pentru teste. Pentru parole sau coduri de securitate folosește SecureRandom.

Ce returnează

Un double în [0.0, 1.0).

Exemple

Exemplul 1: Zaruri aruncate

Rezultatul diferă la fiecare rulare.

public class Main {
    public static void main(String[] args) {
        System.out.println(Math.random());
        for (int i = 0; i < 5; i++) {
            int zar = 1 + (int) (Math.random() * 6);
            System.out.print(zar + " ");
        }
        System.out.println();
    }
}

Rezultat posibil (diferă la fiecare rulare)

0.7316828427264052
4 1 6 6 2

Exemplul 2: Intervalul este mereu respectat

Generăm 100.000 de valori și verificăm limitele: rezultatul afișat este mereu același.

public class Main {
    public static void main(String[] args) {
        double minim = 1, maxim = 0;
        boolean toateZarurileCorecte = true;
        for (int i = 0; i < 100_000; i++) {
            double r = Math.random();
            minim = Math.min(minim, r);
            maxim = Math.max(maxim, r);
            int zar = 1 + (int) (r * 6);
            if (zar < 1 || zar > 6) {
                toateZarurileCorecte = false;
            }
        }
        System.out.println("minim >= 0: " + (minim >= 0));
        System.out.println("maxim < 1: " + (maxim < 1));
        System.out.println("zaruri între 1 și 6: " + toateZarurileCorecte);
    }
}

Rezultat

minim >= 0: true
maxim < 1: true
zaruri între 1 și 6: true

Exemplul 3: Aceeași secvență cu un seed fix

Cu java.util.Random și un seed fix, „tragerea la sorți” se repetă identic la fiecare rulare.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        String[] elevi = {"Ana", "Ion", "Maria", "Radu", "Elena"};
        Random r = new Random(2026);
        for (int i = 0; i < 3; i++) {
            System.out.println("La tablă: " + elevi[r.nextInt(elevi.length)]);
        }
    }
}

Rezultat

La tablă: Elena
La tablă: Ana
La tablă: Maria

Greșeli frecvente

  • Scrii (int) Math.random() * 6: conversia se aplică înainte de înmulțire, iar (int) dintr-o valoare sub 1 este mereu 0. Pune paranteze: (int) (Math.random() * 6).
  • Folosești Math.random() pentru parole sau coduri de resetare: nu este sigur criptografic. Folosește SecureRandom.

Comenzi înrudite

  • Math.floor: floor() rotunjește în jos (spre minus infinit), ceil() rotunjește în sus (spre plus infinit); ambele returnează double.
  • Math: Clasa cu funcții matematice gata făcute: rotunjiri, puteri, radicali, trigonometrie, minim/maxim și calcule întregi sigure.
  • Math.round: round() rotunjește la cel mai apropiat întreg (.5 în sus); rint() rotunjește .5 spre numărul par și returnează double.