Como posso ta impedindo repeticao de numeros gerado?
5 respostasResolvido
java
L
lucky_800
Ola pessoal estou criando esse gerador de numeros preciso de 5 colunas e linhas so que nao consigo impedir a repetição se alguem poder ajudar agradeco. Obrigado !!
packageheranca;importjava.util.Random;publicclasszeroAcCEm{publicstaticvoidmain(String[]args){Randomgerador=newRandom();intA=0,B=0;for(inti=0;i<4;i++){//100 porque vai gerar apenas ate 99 nada maior que issoA=gerador.nextInt(100);System.out.printf(" [%d] ",A);for(intj=0;j<4;j++){B=gerador.nextInt(100);System.out.printf(" [%d] ",B);}System.out.println("");}}}
Acho que o jeito mais simples seria gerar uma lista já preenchida com os 100 números, depois vc embaralha a lista e pega apenas os 20 primeiros números. Seria algo assim:
Não estou no Eclipse agora para testar, mas o código ficaria mais ou menos assim.
L
lucky_800
eu somente nao entendi esta condição
W
wldomiciano
Isso serve para identificar números que são múltiplos de 5.
Sempre que i + 1 for 5, 10 ou 15, ele vai inserir a quebra de linha para a matriz aparecer certinha na tela.
H
hugokotsubo1 like
O problema desta abordagem é nos casos em que o tamanho da amostra é muito próximo do total de elementos.
Por exemplo, se forem números de 1 a 100 e eu quero pegar 95 deles. Quando a lista tiver mais de 50 elementos, a chance de gerar um número repetido é maior do que a de gerar um novo. Então o loop se repetirá várias vezes até encontrar um número que ainda não está no Set. E quanto mais números na lista, maior é a chance de gerar repetições e de precisar de várias iterações até surgir um novo número.
Claro que para poucos elementos isso não chega a ser um problema, mas para casos como esse eu acho melhor usar o que já foi sugerido acima: embaralhar os elementos e pegar os N primeiros (aliás, esse algoritmo é conhecido como Fisher-Yates).