MegaSena

[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);
}

}

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

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

a chance de ganhar na MegaSenha é de

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

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

[code]import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class Urna {
private final List 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()); 
}

}[/code]

[code]public class UrnaNumerica extends Urna {

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));
}

}[/code]

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

[code]public class MegaSena {
public static List 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");
}

}[/code]

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