Random.nextDouble în Java

nextDouble() dă un număr real între 0.0 și 1.0 (fără 1.0); nextBoolean() dă true sau false cu șanse egale.

Sintaxă
double nextDouble()                      // 0.0 … 1.0 (fără 1.0)
double nextDouble(double start, double limita) // Java 17
boolean nextBoolean()
double nextGaussian()

Ce face Random.nextDouble

nextDouble() returnează un double uniform distribuit în intervalul [0.0, 1.0). Îl folosești pentru probabilități: r.nextDouble() < 0.3 este adevărat în aproximativ 30% din cazuri. Din Java 17, nextDouble(start, limita) dă direct un număr într-un interval.

nextBoolean() returnează true sau false, fiecare cu probabilitatea 1/2: o aruncare de monedă. nextGaussian() dă numere după distribuția normală (clopotul lui Gauss), cu media 0 și abaterea standard 1.

Parametri

Parametru Descriere
start, limita Intervalul [start, limita) pentru varianta din Java 17.

Ce returnează

nextDouble: un double; nextBoolean: un boolean.

Exemple

Exemplul 1: Monedă și numere reale cu sămânță fixă

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random r = new Random(10);
        for (int i = 1; i <= 3; i++) {
            System.out.println("Moneda " + i + ": " + (r.nextBoolean() ? "cap" : "pajură"));
        }
        System.out.printf("nextDouble(): %.4f%n", r.nextDouble());
        System.out.printf("Preț între 10 și 20 lei: %.2f%n", r.nextDouble(10, 20));
    }
}

Rezultat

Moneda 1: cap
Moneda 2: pajură
Moneda 3: pajură
nextDouble(): 0.4129
Preț între 10 și 20 lei: 16.72

Exemplul 2: O probabilitate de 30%, verificată pe 100.000 de încercări

Proporția obținută este foarte aproape de 0,30.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random r = new Random(1);
        int ploua = 0;
        int zile = 100_000;
        for (int i = 0; i < zile; i++) {
            if (r.nextDouble() < 0.3) ploua++;
        }
        System.out.printf("Zile cu ploaie: %d din %d (%.3f)%n", ploua, zile, (double) ploua / zile);
    }
}

Rezultat

Zile cu ploaie: 30096 din 100000 (0.301)

Exemplul 3: Monedă corectă: aproape jumătate cap

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random r = new Random(99);
        int cap = 0;
        for (int i = 0; i < 10_000; i++) {
            if (r.nextBoolean()) cap++;
        }
        System.out.println("Cap: " + cap + ", pajură: " + (10_000 - cap));
    }
}

Rezultat

Cap: 5027, pajură: 4973

Greșeli frecvente

  • Crezi că nextDouble() poate da 1.0. Limita de sus nu este inclusă niciodată.
  • Scrii (int) (r.nextDouble() * 6) pentru un zar și uiți + 1. Obții 0…5; mai simplu folosește nextInt(1, 7).

Comenzi înrudite

  • Random: Generator de numere pseudo-aleatorii; nextInt(n) dă un întreg între 0 și n-1. Cu o sămânță fixă, șirul se repetă.
  • Random.ints: Returnează un IntStream de numere aleatorii: ints(5, 1, 50) dă 5 numere între 1 și 49.
  • Math.random: Returnează un număr aleatoriu double, mai mare sau egal cu 0.0 și strict mai mic decât 1.0.