Numeros Aleatorios Sem Repetição
:oops:
Estou tentando fazer um programa que gere numeros aleatorios para Mega Sena:
Por exemplo: quero que ele gere 30 Cartelas. Ele tem que gerar 30 sequencia de 6 numeros entre 1 e 60.
Até ai tudo bem. Fiz o Programa que gera tudo isto beleza, só que tem um detalhe, as vezes ele gera numero repedido. Ex:
02 - 10 - 20 - 32 - 32 - 45
Existe algum jeito de fazer com que não repita atravez de comando ou tenho que tratar isto na mão com algum código extenso??
Será que nestas 30 sequencias vai ter alguma que vai repetir??
Como eu trato isto??
Alguem pode me ajudar???
Desde já Agradeço!!!!!
Mlcneto
Curtidas 0
Respostas
Vitor Pamplona
09/04/2009
Sugiro fazer o seguinte...
Ao fazer cada cartela, compare o número sorteado para ver se não está na cartela corrente.
Após todas as cartelas geradas, compare todas elas para ver se não há cartelas iguais
:!:
GOSTEI 0
Vitor Pamplona
09/04/2009
Vc vai ter um vetor pra armazenar os numeros, ok ?
inicie ele com todas as posicoes -1 para nao dar problema... ai voce gera um numero aleatorio e armazena... a partir do segundo que voce gerar, vc pega e varre o vetor inteiro vendo se ele ja esta la, se estiver, anule e gere outro, se nao estiver, BINGO, numero novo =P
Tranquilo né?
Não se esqueca do [color=red:f4219cf418]JavaFREE[/color:f4219cf418] se por fim, vc ganhar da Mega Sena hein! =P
eheheheheh
Abraços!
GOSTEI 0
Edinei Manica
09/04/2009
Vc pode guardar os valores já sorteados em uma ArraList, e ir comparando se o número já saio !!!!!
GOSTEI 0
Vitor Pamplona
09/04/2009
[quote="lucastex"]Vc vai ter um vetor pra armazenar os numeros, ok ?
inicie ele com todas as posicoes -1 para nao dar problema... ai voce gera um numero aleatorio e armazena... a partir do segundo que voce gerar, vc pega e varre o vetor inteiro vendo se ele ja esta la, se estiver, anule e gere outro, se nao estiver, BINGO, numero novo =P
Tranquilo né?
Não se esqueca do [color=red:7280aaee67]JavaFREE[/color:7280aaee67] se por fim, vc ganhar da Mega Sena hein! =P
eheheheheh
Abraços!
Sendo assim dah para usar uma estrutura do tipo Map, evitando itens duplicados :)
Aih nem precisa fazer a comparação
:!:
GOSTEI 0
Mlcneto
09/04/2009
Eu estou armazanando em um vetor
Como seria essa estrutura MAP
GOSTEI 0
Vitor Pamplona
09/04/2009
Map é uma estrutura de dados que trabalha com chaves (no caso o teu número sorteado).
Caso vc tente incluir um item com a mesma chave que outro, ela substitui o valor deste item.
Normalmente é usado quando vc sabe todas as chaves, mas para o teu caso pode servir.
De uma olhada na API : http://java.sun.com/j2se/1.4.2/docs/api/index.html
Construtor
Adicionar na lista
Retornar os valores (Usar Iterador)
HashMap map = new HashMap();
map.put( número, número )
Iterator i = map.keySet().iterator();
while (i.hasNext()) {
numero = (String) i.next();
}GOSTEI 0
Bruno Borges
09/04/2009
Nao use Map pra isso....
eh besteira... pq? pq vc tah armazenando apenas um dado, e nao fazendo um par de Key-Value...
sorteie os numeros, jogando pra dentro de um array primitivo... use o metodo binarySearch da classe Arrays para saber se um numero N sorteado jah nao consta no array... done. :!:
GOSTEI 0
Bruno Borges
09/04/2009
Por que vc naum utiliza um Set???
Defina um tamanho para o campo e adicione seus dados até preencher com a quantidade...
Assim já utiliza o algoritmos do próprio Set e lembrando que o Set não permite repetição
:!: :!: :!: :!: :!:
Set valores = new HashSet();
while (valores.size() < 10) {
int x = (int) (100 * Math.random());
valores.add(new Integer(x));
}GOSTEI 0
Bruno Borges
09/04/2009
nao creio q usar Set (HashSet) nesse caso venha a ter vantagens... :( axo q um int[] jah basta... bom, vai da escolha da solucao agora... :)
GOSTEI 0
Mlcneto
09/04/2009
Amigos, valeu pela ajuda...
Agora eu acho consegui fazer o negocio funcionar
Só falta eu conseguir ganhar...
Ou seja impossivel
Alguem sabe algo sobre Clusters de Maqs. Linux???
Quero implementar bem este programa e coloca-lo pra
rodar em um cluster ja que imagino que vai demorar muito
se eu for gerar 20.000.000 de cartelas...
Pra falar a verdade acho que eu nunca vou jogar, só quero fazer este programa por fazer e roda-lo em um cluster...
GOSTEI 0
Jean Rodrigues
09/04/2009
[quote="mlcneto"]
Alguem sabe algo sobre Clusters de Maqs. Linux???
http://www.clubedohardware.com.br
Aqui vc encontra sobre clusters com máq. Linux :!:
GOSTEI 0
Rafael Manzini
09/04/2009
[color=black][/color]
FUNCIONAA!!!!!!!!!!!!
public class Sorteador {
/**
* @author Rafael Tamaro Manzini
*/
public static void main(String[] args) {
int [] myGame = new int[6];
int valor;
int novovalor;
int i;
int z;
for(i = 0; i <= 5; i++)
{
valor = (int) (1 + Math.random() * 60); //SORTEIA UM VALOR DE 1 A 60
myGame[i] = valor; //GUARDA ESSE VALOR NA PRIMEIRA POSIÇÃO DO ARRAY
novovalor = (int) (1 + Math.random() * 60);
for(z = 0; z <= 5; z++)
{
if(myGame[z] == novovalor)
{
novovalor = (int) (1 + Math.random() * 60);
z=0;
}
}
myGame[i] = novovalor;
System.out.println("" + myGame[i]);
}
}
}
Pessoal basicamente fiz um looping gerando números randômicos, e dentro do outro looping verifico se o novo valor randômico esta dentro no nosso array, caso esteje, novo número é sorteado e o looping reseta, caso contrario não faz nada e ao sair do looping armazena o novo valor no nosso vetor, meu código esta porco pois imagine que algum sortudo rode o programa e sempre o novo valor já esteje dentro do array, neste caso entrariamos em looping infinito. Agora se alguem ganhar na mega-sena com meu programa, favor me enviar um email falando que pelo menos vou ganhar um carro novo (tipo um jaguar) e uma casa nova. =D
GOSTEI 0