Funçao para não repetir numeros ja gerados

11 respostas
joao.ramos

Boa noite pessoal,

estou ja ha alguns dias quebrando a cabeça para criar essa função mais não ta saindo.
eh o seguinte, o programa tem que gerar 6 valores consecultivos sem repetir os valores, usando a função Randon ela sorteia de 0 a o valor determinado sempre, e pode ter o caso de sair repetido, e eh justamente nisso que eu estou parado.

Alguem pode me ajudar?

11 Respostas

peczenyj

vc pode ir armazenando os numeros gerados em um array. para cada novo número vc compara se ele ja foi sorteado e, se for o caso, sorteia outro.

ai vc vai descobrir que isso é um algoritmo interessante mas muito ruim e pode pensar numa forma de, dado um array de numeros em sequencia. sortear 2 posições randômicamente e troca-las.

faça isso um número de vezes proporcional ao número de elementos que vc tem. se ficar ruim, testa alterar a sequencia o dobro de vezes. se continuar ruim testa com o quadrado.

Adolfo_Rodrigues

A mega sena acumulou?? hehehe

joao.ramos

eu ja tentei fazer com um arrey, mas nao da certo!
outra coisa, esse vetor ja é predefinido, tendo por objetivo por os valores e fazer essa comparação para na hora da exibição não repetir os valores.

teria como por esse codigo ai?

obrigado!

benflodin

Ou voce pode usar SecureRandom + Collections.suffle(obj);
da uma olha aqui: http://www.guj.com.br/posts/list/30498.java

joao.ramos

a mega sena nao acumulou esse programa eh pro meu chefe, que ele eh viciado em jogo de loteria.
ai quem se fode pra trab., estudar, resolver os problemas da vida sou eu e nao o desoculpado.

aew…

FredMP

Bom… vc poderia jogar o resultado de cada sorteio em um conjunto (que não aceita repetições) e verificar o tamanho até que seja igual a 6 e então exibir o resultado. Tipo isso:

java.util.Set<Integer> numeros = new java.util.TreeSet<Integer>(); while (numeros.size() < 6) { numeros.add(new Integer(new Random().nextInt(60) + 1)); } System.out.println(numeros);

Quando ganhar na mega-sena não esquece dos amigos do GUJ hein!! :smiley:

LPJava

vc pode usar uma dessas classes da interface Set:

  • HashSet,LinkedhashSet, TreeSet.

Eles nao aceita valores repetidos!! :smiley:

rolemberg

cara faz um for de 1 a 6 e para preencher o array e sempre valide o numero perguntando se é igual ao anterior…se for igual gere o numero novamente…

vlw

joao.ramos

sim, eu sei que pode se fazer isso, implementar um arrey, sorteia um valor, e os que sao sorteados a seguir vao sendo comparados.
eu ja tentei fazer isso, mas nao consegui, e por isso estou aqui.
o prazo que eu estipulei a ele ja ta chegando e nao to conseguindo e to apelando aqui no guj.

se possivel ponha o codigo aqui.

obrigado!

marcushlm

ja testou o código do FredMP acima?

java.util.Set<Integer> numeros = new java.util.TreeSet<Integer>(); while (numeros.size() < 6) { numeros.add(new Integer(new Random().nextInt(60) + 1)); } System.out.println(numeros);

joao.ramos

testei e ta rodando.
ate agora nao repetiu nenhum numero.

valeu ai galera, quando eu ganhar dou uma merrequinha pra vcs!

aew…

Criado 2 de outubro de 2007
Ultima resposta 4 de out. de 2007
Respostas 11
Participantes 8