MegaSena

3 respostas
sidcazi

[color=darkred][/color]Galera este é o algoritimo masi correto pra gerar jogos da mega sena sem repetição, porem tem um unico problema, se o cara for muito sortudo e o penultimo numero do vetor da ultima linha da coleção for 60 pode ocorrer o risco de o ultimo ser 60… fui galera este ai ja era

import javax.swing.*;
public class MegaSena{

int vetor[];

int jogos[][];

int n;

int num;
//Construtor

public MegaSena()

{

vetor = new int [6];

jogos= new int [10][6];

}

//Lendo o número de jogos

public void carregaJogo()

{

num = Integer.parseInt(JOptionPane.showInputDialog(Entre com nr de jogos maximo 10));

if(num > 10)

{

num = Integer.parseInt(JOptionPane.showInputDialog(Numero maximo de jogos são 10));

}

for(int col =0;col<num;col++)

{

vetor = GeraJogo();

for(int lin=0; lin<6; lin++)

{

jogos[col][lin]= vetor[lin];

}

}

n=num;

}

//Organizando os números

public int[] bubbleSort(int vetor[])

{

boolean houve_troca=true;
for(int pass=1;(pass<vetor.length)&&(houve_troca);pass++)

{

houve_troca=false;

for(int e=0; e < vetor.length-1; e++)

{

if(vetor[e]>vetor[e+1])

{

int aux;

aux=vetor[e];

vetor[e]=vetor[e+1];

vetor[e+1]=aux;

houve_troca=true;

}

}

}

return vetor;

}
//Gerando o Jogo

public int[] GeraJogo()

{

vetor[0]= (int)(Math.random()* 60+1);

for(int i=1;i<6;i++)

{

int palpite =(int)(Math.random()* 60+1);
vetor[i]= palpite;

for(int j = 0; j < i; j++)

{

while(vetor[i] == vetor[j])

{

palpite =(int)(Math.random()* 60+1);

vetor[i]=palpite;

}

}

}

return bubbleSort(vetor);

}

public void mostraJogo(){

String e = “”;

for(int coluna = 0;coluna < n;coluna++){

for(int linha = 0;linha < vetor.length;linha++){

e += jogos[coluna][linha] + " , “;

}

e += " \n ;
}

JOptionPane.showMessageDialog(null,Quantidade de Jogos: + num +”\n+e);

}

}

3 Respostas

S

Quais são as chances de ganhar? :stuck_out_tongue:

Lavieri

Não consegui ler seu código por ele não estar identado, é sempre bom postar o código entre as tages [code] aqui do forum

samuelm7:
Quais são as chances de ganhar? :P

a chance de ganhar na MegaSenha é de

6/60 * 5/59 * 4/58 * 3/57 * 2/56 * 1/55

Lavieri
sidcazi:
[color=darkred][/color]Galera este é o algoritimo masi correto pra gerar jogos da mega sena sem repetição, porem tem um unico problema, se o cara for muito sortudo e o penultimo numero do vetor da ultima linha da coleção for 60 pode ocorrer o risco de o ultimo ser 60... fui galera este ai ja era

uma forma facil de gerar número sem reposição, é usando Collection(lists, sets, collections etc) para os possiveis resultados e usando remove a cada sortei...

fiz aqui uma pequena classe Urna, para exemplificar

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class Urna<T> {
    private final List<T> conteudo;
    private final Random sorteio = new Random();

    public Urna(List<T> conteudo) {
        this.conteudo = new ArrayList<T>(conteudo.size());
        this.conteudo.addAll(conteudo);
    }

    public T sortear() {
        if (conteudo.size() <= 0)
           throw new RuntimeException("Não há mais itens na urna");
        Collections.shuffle(conteudo); //simula uma balançada na urna ^^ (embaralha os valores)
        return conteudo.remove(proximoItem()); //retira um item aleatoria da runa
    }

    public List<T> sortear(int numeroDeBolas) {
        List<T> resultado = new ArrayList<T>(numeroDeBolas);
        for (int i = 0; i< numeroDeBolas; i++)
            resultado.add(sortear());
        return resultado;
    }
    
    /**
     * Escolhe um item da urna, aleatoriamente
     * @return index de um item aleatorio contido na urna
     */
    private int proximoItem() {
        return sorteio.nextInt(conteudo.size()); 
    }
}
public class UrnaNumerica extends Urna<Integer> {

    private static List<Integer> gerarConteudo(int size) {
        List<Integer> bolinhas = new ArrayList<Integer>(size);
        for (int i = 1; i<=size;i++)
            bolinhas.add(i);
        return bolinhas;
    }
    
    public UrnaNumerica(List<Integer> conteudo) {
        super(conteudo);
    }
    
    public UrnaNumerica(int size) {
        this(gerarConteudo(size));
    }
}

ai vc pode usar a urna como quiser... um exemplo segue abaixo

public class MegaSena {
    public static List<Integer> resultado() {
        UrnaNumerica urna = new UrnaNumerica(60);
        return resultado(urna);
    }

    public static List<Integer> resultado(UrnaNumerica urna) {
        Integer[] result = new Integer[6];
        for (int i = 0; i < 6; i++)
            result[i] = urna.sortear();
        return Arrays.asList(result);
    }

    public static boolean confereResultado(List<Integer> resultado, List<Integer> seuJogo) {
        boolean acertou = true;
        for (Integer bola : resultado) {
            acertou = seuJogo.contains(bola);
            if (!acertou)
                break;
        }
        return acertou;
    }

    public static void main(String ... args) {
        Urna urna = new UrnaNumerica(60);
        System.out.print("Sortei de teste :");
        for (int i = 0; i<6; i++)
            System.out.print(urna.sortear() + " ");
        System.out.println("");

        //vc tb pode sortear assim um resultado
        List<Integer> resultados = MegaSena.resultado();
        System.out.print("Sortei da Mega Senha :");
        for (Integer r : resultados)
            System.out.print(r + " ");
        System.out.println("");

        //pode tb fazer um jogo e conferir se ganhou
        List<Integer> jogo = new ArrayList<Integer>(6);
        jogo.add(12); jogo.add(9); jogo.add(3); jogo.add(45); jogo.add(27); jogo.add(34);

        if (MegaSena.confereResultado(resultados, jogo))
            System.out.println("Vc ganhou");
        else
            System.out.println("Vc perdeu");
    }
}

da pra depois incluir método de quadra, quina .... e o que vc kizer.... sortear usando Remove em uma lista, pra mim, é a melhor forma de garantir um sortei sem reposição

Criado 7 de março de 2009
Ultima resposta 7 de mar. de 2009
Respostas 3
Participantes 3