Geração de números aleatórios em Java em um intervalo determinado: tutorial

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Números aleatórios em Java: do caos à ordem

\n\n

Olá, futuro javaísta! Se você já escreveu jogos, simulações, testes ou apenas quis adicionar um elemento de surpresa ao seu programa, certamente já precisou obter um número inteiro aleatório em um intervalo determinado. Parece simples, não é? Mas na prática, iniciantes frequentemente se perguntam: "Por que estou recebendo números de 0 a 100, e não de 50 a 100?" ou "Por que meu código está dando erro?".

\n\n

Hoje vamos resolver esse assunto de uma vez por todas. Você aprenderá como gerar um número aleatório em Java em qualquer intervalo, usando três abordagens principais. Spoiler: uma delas é a melhor escolha para 90% dos casos. Vamos lá!

\n\n

Por que isso é importante?

\n

A geração de números aleatórios é uma tarefa básica, mas criticamente importante. Não há como evitar ao:

\n
    \n
  • Criar dados de teste (por exemplo, IDs de usuários).
  • \n
  • Implementar mecânicas de jogo (drop de itens, geração de níveis).
  • \n
  • Simular processos aleatórios (filas, tráfego).
  • \n
  • Selecionar um elemento aleatório de uma lista.
  • \n
\n\n

Dominando este tópico, você deixará de temer a "mágica" no código e poderá controlar a aleatoriedade com confiança.

\n\n

Método nº1: O clássico — java.util.Random

\n

Este é o avô de todos os geradores em Java. A classe java.util.Random existe desde as primeiras versões e ainda é amplamente utilizada. Sua principal vantagem é a versatilidade.

\n\n

Como obter um int aleatório de 0 a N?

\n

O método nextInt(int bound) retorna um número aleatório de 0 (inclusivo) até bound (exclusivo). Ou seja, se você escrever nextInt(10), obterá um número de 0 a 9.

\n\n
import java.util.Random;\n\npublic class RandomExample {\n    public static void main(String[] args) {\n        Random random = new Random();\n        int number = random.nextInt(10); // 0..9\n        System.out.println("Número aleatório: " + number);\n    }\n}
\n\n

E como fazer de 5 a 15?

\n

Aqui está o segredo principal. Para obter um número em um intervalo arbitrário [min, max], você precisa usar a fórmula:

\n

min + random.nextInt(max - min + 1)

\n

Vamos analisar com o exemplo: intervalo de 5 a 15.

\n
    \n
  • max - min + 1 = 15 - 5 + 1 = 11. Então nextInt(11) dará números de 0 a 10.
  • \n
  • Adicionamos min (5): obtemos o intervalo 5..15.
  • \n
\n

Verificamos: se nextInt(11) retornou 0, então 0+5 = 5. Se retornou 10, então 10+5 = 15. Perfeito!

\n\n
Random random = new Random();\nint min = 5;\nint max = 15;\nint randomNumber = min + random.nextInt(max - min + 1);\nSystem.out.println("Número aleatório de 5 a 15: " + randomNumber);
\n\n

Importante: Não se esqueça do +1! Sem ele, o valor máximo será 1 a menos.

\n\n

Método nº2: Abordagem moderna — ThreadLocalRandom

\n

A partir do Java 7, surgiu a classe ThreadLocalRandom. Ela é especialmente otimizada para aplicações multithread (mas funciona muito bem também em single-thread). A principal vantagem é que é mais rápida que Random e não requer a criação de um objeto separado.

\n\n

Uso em código single-thread

\n

Ela possui um método conveniente nextInt(int origin, int bound) que já aceita os limites do intervalo! Observe: origin é inclusivo, bound é exclusivo. Se você precisar incluir também o limite superior, basta adicionar +1.

\n\n
import java.util.concurrent.ThreadLocalRandom;\n\npublic class ThreadLocalRandomExample {\n    public static void main(String[] args) {\n        // Número de 5 a 15 (inclusivo)\n        int randomNumber = ThreadLocalRandom.current().nextInt(5, 16);\n        System.out.println("Número aleatório: " + randomNumber);\n    }\n}
\n\n

Viu como é simples? Sem fórmulas,

Blogs

Book Recommendations