Gere valores duplos aleatórios entre 0 e 1 em Java

Rupam Yadav 12 outubro 2023
  1. Gere valores duplos aleatórios entre 0 e 1 usando Math.random() em Java
  2. Gere valores duplos aleatórios entre 0 e 1 usando Random().nextDouble() em Java
  3. Gere valores duplos aleatórios entre 0 e 1 usando ThreadLocalRandom.current().nextDouble() em Java
Gere valores duplos aleatórios entre 0 e 1 em Java

Este artigo irá apresentar três métodos para gerar valores aleatórios entre 0 e 1 do tipo primitivo double. Para provar a aleatoriedade dos valores gerados, usaremos um loop para gerar dez valores de tipo duplo aleatórios entre 0 e 1.

Gere valores duplos aleatórios entre 0 e 1 usando Math.random() em Java

A classe Math pode ser usada para realizar várias operações matemáticas. Podemos usar essa classe para gerar números aleatórios também. Math.random() é a função estática que retorna números aleatórios entre 0 e 1. Aqui, 0 inclui os valores gerados, enquanto 1 é sempre exclusivo.

No exemplo a seguir, usamos Math.random() para gerar valores aleatórios do tipo double. Na saída, podemos ver que os valores são todos aleatórios.

public class RandomDouble {
  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      double randomDbl = Math.random();

      System.out.println(randomDbl);
    }
  }
}

Resultado:

0.9537872648347154
0.2863804438195172
0.5815339629441948
0.7734677312115609
0.021051510563543485
0.9064133490694901
0.6833468691871607
0.30655711217738246
0.2730784326888416
0.6804778782692341

Gere valores duplos aleatórios entre 0 e 1 usando Random().nextDouble() em Java

Outro método que pode gerar números aleatórios entre 0 e 1 é nextDouble(), uma parte da classe java.util.Random. Quando chamamos nextDouble() com o objeto da classe Random, ele retorna um valor aleatório entre 0 e 1, assim como vimos no exemplo anterior.

Diz-se que este método é mais eficiente do que Math.random().

import java.util.Random;

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

    for (int i = 0; i < 10; i++) {
      double randomDbl = randomObj.nextDouble();

      System.out.println(randomDbl);
    }
  }
}

Resultado:

0.240017494934622
0.08331956619499614
0.4359524465181911
0.5291811081068774
0.38193057731688373
0.6969527822622924
0.5436002348156281
0.32176862575520415
0.07327708002828293
0.9005635171231344

Gere valores duplos aleatórios entre 0 e 1 usando ThreadLocalRandom.current().nextDouble() em Java

As duas técnicas que vimos neste tutorial não são eficientes para sistemas multithread e podem resultar em baixo desempenho. Isso acontece porque quando geramos números aleatórios usando a classe Random todos os threads compartilham a mesma instância, o que significa que quando uma mudança ocorre em um thread, todos os outros threads também são executados.

Para resolver esse problema, o Java introduziu ThreadLocalRandom na atualização do JDK 7. É uma classe que roda apenas no encadeamento atual, resultando em melhor desempenho em um ambiente com vários encadeamentos.

No exemplo abaixo, chamamos nextDouble() que gera valores aleatórios duplos com ThreadLocalRandom.current() e retorna um valor duplo gerado aleatoriamente entre 0 e 1.

import java.util.concurrent.ThreadLocalRandom;

public class RandomDouble {
  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      double randomDbl = ThreadLocalRandom.current().nextDouble();

      System.out.println(randomDbl);
    }
  }
}

Resultado:

0.9717084711770174
0.8977374014983726
0.2744375247405819
0.2866498720386894
0.6118970047667582
0.7441044456568308
0.21043457873690274
0.08985457420563114
0.86748682220748
0.18952106607144148
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Artigo relacionado - Java Random