Random.nextInt în Kotlin

Generează numere întregi aleatorii; Random(seed) dă mereu aceeași secvență, Random.nextInt() una diferită la fiecare rulare.

Sintaxă
import kotlin.random.Random
fun Random(seed: Int): Random
fun Random.nextInt(until: Int): Int
fun Random.nextInt(from: Int, until: Int): Int
fun Random.nextBoolean(): Boolean

Ce face Random.nextInt

Random.nextInt(1, 7) returnează un număr întreg aleatoriu între 1 (inclus) și 7 (exclus), adică un zar de la 1 la 6. Cu un singur argument, nextInt(10) dă un număr de la 0 la 9. nextBoolean() returnează true sau false cu șanse egale, ca aruncarea unei monede.

Random folosit direct (obiectul implicit, Random.Default) dă rezultate diferite la fiecare rulare. Random(42) creează un generator cu o sămânță (seed) fixă: produce mereu aceeași secvență de numere, ceea ce este util pentru teste și pentru exemplele de mai jos, care afișează același rezultat de fiecare dată.

Pentru o valoare dintr-un interval poți scrie și (1..6).random(), iar pentru un element dintr-o listă lista.random(). Generatorul din kotlin.random nu este potrivit pentru parole sau chei; pentru asta folosește java.security.SecureRandom.

Parametri

Parametru Descriere
seed Sămânța generatorului; aceeași sămânță dă aceeași secvență.
from Limita de jos, inclusă (implicit 0).
until Limita de sus, exclusă.

Ce returnează

nextInt: un Int din interval. nextBoolean: un Boolean.

Exemple

Exemplul 1: Zaruri cu sămânță fixă

Cu Random(42) secvența este aceeași la fiecare rulare. Limita de sus (7) nu apare niciodată.

import kotlin.random.Random

fun main() {
    val zar = Random(42)
    val aruncari = List(10) { zar.nextInt(1, 7) }
    println(aruncari)
    println("Suma: ${aruncari.sum()}")
}

Rezultat

[6, 1, 6, 3, 2, 1, 2, 3, 2, 4]
Suma: 30

Exemplul 2: Aceeași sămânță, aceleași numere

Două generatoare cu aceeași sămânță dau exact aceeași secvență; o sămânță diferită dă alta.

import kotlin.random.Random

fun main() {
    val a = Random(2025)
    val b = Random(2025)
    val c = Random(7)
    println(List(5) { a.nextInt(100) })
    println(List(5) { b.nextInt(100) })
    println(List(5) { c.nextInt(100) })
}

Rezultat

[3, 27, 19, 0, 0]
[3, 27, 19, 0, 0]
[86, 89, 23, 66, 57]

Exemplul 3: Aruncarea monedei

Numărăm câte ori a ieșit „cap” din 1000 de aruncări; rezultatul este aproape de jumătate.

import kotlin.random.Random

fun main() {
    val moneda = Random(1)
    val cap = (1..1000).count { moneda.nextBoolean() }
    println("Cap: $cap, pajură: ${1000 - cap}")
}

Rezultat

Cap: 497, pajură: 503

Exemplul 4: Generator fără sămânță

Random.nextInt pe obiectul implicit dă alt rezultat la fiecare rulare, de aceea rezultatul de mai jos este doar un exemplu.

import kotlin.random.Random

fun main() {
    val bilet = List(6) { Random.nextInt(1, 50) }
    println("Numere loto: $bilet")
}

Rezultat posibil (diferă la fiecare rulare)

Numere loto: [17, 3, 42, 28, 9, 35]

Greșeli frecvente

  • Scrii nextInt(1, 6) pentru un zar. Limita de sus este exclusă, deci 6 nu apare niciodată; scrie nextInt(1, 7).
  • Creezi un Random(42) nou la fiecare pas al buclei. Primești de fiecare dată același prim număr; creează generatorul o singură dată.
  • Folosești Random pentru parole sau coduri de securitate. Folosește SecureRandom.

Comenzi înrudite

  • Random.nextDouble: nextDouble dă un număr zecimal aleatoriu (implicit între 0 și 1), nextLong un întreg Long aleatoriu.
  • Int.until: Construiesc șiruri de numere pentru bucle: until fără capătul de sus, downTo descrescător, step cu pas.
  • IntRange.contains: Lucrul cu un interval a..b: in verifică apartenența, first și last dau capetele, reversed îl inversează.