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.
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.
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();
}
}
Irei precisar fazer esse sorteio em 2 forma de 0 a 8 e de 0 a 16.
Se usar o código do exemplo acima, é só instanciar a classe Numeros
com 0
e 8
ou com 0
e 16