Como fazer para gerar números aleatorios de 0000 até 9999

Como faço para poder gerar número aleatório só de 4 dígitos, de 0000 até 9999

O primeiro número de 4 dígitos é 1000, nao 0000 (que é apenas 0).
Qual dois dois você quer começar exatamente?

A classe Random tem um método chamado ints que te retorna números aleatórios num intervalo desejado. Para ambos os casos na pergunta acima, pode resolver seu problema.

1 curtida

vamos la

esse é um assunto interessante.

primeiro vc não tem numeros aleatorios. vc tem numeros pseudo-aleatorios, ou seja eles são gerados a partir de um algoritmo parametrizavel. se vc usar os mesmos parametros é capaz de vc gerar a mesma sequencia. em geral usa-se um parametro chamado seed (a semente) e é comum utilizar algo relacionado a data de hoje. assim se vc executa hoje ou daqui um segundo as sequencias serão bem diferentes. é considerado uma questão de segurança isso.

dito isso, se vc não se importa com segurança, vamos gerar um numero aleatorio.

o problema que vc descreve é: vc quer algo que pertença ao intervalo [0 e 10000) (leia-se fechado 0, aberto 10000 ). se vc tiver algo que gere um numero de ponto flutuante entre [0 e 1] ( float ) , pode ser bastante seguro vc fazer

numero * limiteMaximo

e então converter esse numero para inteiro. fique atendo que, se vc o seu limite maximo é 5 (aberto) e o seu numero gerado é 0.999999999…, vc pode acabar com 4.999999999999999999999995… e dependendo de como vc converte para inteiro, vc pode arrendondar pra cima e gerar 5. isso é muito ruim. arredonde para baixo ( ou seja , vc quer usar floor e não ceil ou simplesmente fazer um cast pra int ).

por exemplo vc pode usar este metodo:

https://docs.oracle.com/javase/7/docs/api/java/util/Random.html#nextDouble()

ou usar a versão float. eu acho que da no mesmo.

agora, perceba que vc pode omitit rodas essas contas com um metodo apropriado:

https://docs.oracle.com/javase/7/docs/api/java/util/Random.html#nextInt(int)

sobre gerar 0000 : isso não é um numero. numero é 0. vc colocar zeros a frente é uma mascara, é uma formatação de como vc vai apresentar esse numero.

1 curtida

Exemplo:

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Numeros {

    public static void main(String[] args) {
        Numeros lista = new Numeros(0, 9999);
        while (!lista.vazia()) {
            int numero = lista.sortear();
            String formatado = String.format("%04d", numero);
            System.out.println(formatado);
        }
    }

    private final List<Integer> numeros = new ArrayList<>();

    public Numeros(int de, int ate) {
        for (int numero = de; numero <= ate; numero++) {
            numeros.add(numero);
        }
    }

    public int sortear() {
        if (vazia()) {
            throw new IllegalStateException("Não há mais números para sortear");
        }
        int sorteado = new Random().nextInt(numeros.size());
        return numeros.remove(sorteado);
    }

    public boolean vazia() {
        return numeros.isEmpty();
    }
}
1 curtida

Irei precisar fazer esse sorteio em 2 forma de 0 a 8 e de 0 a 16.

1 curtida

Se usar o código do exemplo acima, é só instanciar a classe Numeros com 0 e 8 ou com 0 e 16

1 curtida