Random.ints în Java

Returnează un IntStream de numere aleatorii: ints(5, 1, 50) dă 5 numere între 1 și 49.

Sintaxă
IntStream ints(long cate, int start, int limita)
IntStream ints(int start, int limita)   // flux infinit
DoubleStream doubles(long cate)

Ce face Random.ints

ints(cate, start, limita) returnează un IntStream cu cate numere aleatorii din intervalul [start, limita). Pe flux poți aplica orice operație de stream: distinct, sorted, boxed, sum etc.

Fără primul argument, fluxul este infinit; îl limitezi cu limit(n). Asta este util cu distinct(): ints(1, 50).distinct().limit(6) dă 6 numere diferite, ca la loto. Există și longs și doubles.

Parametri

Parametru Descriere
cate Câte numere să conțină fluxul (opțional).
start Limita inferioară, inclusivă.
limita Limita superioară, exclusivă.

Ce returnează

Un IntStream.

Exemple

Exemplul 1: Note aleatorii pentru un test

import java.util.Arrays;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random r = new Random(5);
        int[] note = r.ints(8, 1, 11).toArray();
        System.out.println("Note: " + Arrays.toString(note));
        System.out.printf("Media: %.2f%n", Arrays.stream(note).average().orElse(0));
    }
}

Rezultat

Note: [8, 3, 5, 5, 7, 6, 5, 2]
Media: 5.13

Exemplul 2: Loto 6/49: șase numere diferite, sortate

import java.util.Random;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        Random r = new Random(649);
        String bilet = r.ints(1, 50)
            .distinct()
            .limit(6)
            .sorted()
            .mapToObj(String::valueOf)
            .collect(Collectors.joining(" - "));
        System.out.println("Numerele extrase: " + bilet);
    }
}

Rezultat

Numerele extrase: 14 - 18 - 25 - 28 - 36 - 44

Greșeli frecvente

  • Folosești ints(1, 50) fără limit. Fluxul este infinit și programul nu se mai oprește.
  • Pui limit înainte de distinct când vrei numere diferite. Poți obține mai puține numere decât ai cerut.

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.nextDouble: nextDouble() dă un număr real între 0.0 și 1.0 (fără 1.0); nextBoolean() dă true sau false cu șanse egale.
  • IntStream.range: Creează șirul de numere întregi dintre două limite: range fără ultima valoare, rangeClosed cu ea inclusă.