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

5 respostas Resolvido
java
B

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

5 Respostas

A

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.

peczenyj
Solucao aceita

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.

staroski

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();
    }
}
H

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

staroski

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

Criado 10 de outubro de 2018
Ultima resposta 17 de out. de 2018
Respostas 5
Participantes 5