Exercício (Algoritmo MegaSena)

7 respostas
J

Alguém pode me ajudar a fazer esse algoritmo em java?

Crie uma classe chamada MegaSena com a estrutura definida a seguir:

MegaSena

int[] numerosSorteados

void sortear()

boolean ehReptido(int)

void mostrarBilheteSorteado()

Implemente esta classe com os atributos listados acima e com os métodos conforme definição:

sortear -> realiza o sorteio, gerando os 6 números (não repetidos) e armazena-os no atributo correspondente.

ehRepetido -> método responsável em verificar se um número já existe dentre os números que já foram sorteados, retornando true caso isso ocorra e false caso contrário.

mostrarBilheteSorteado -> mostra os números sorteados do bilhete impressos na tela.

7 Respostas

Anime

Oi,

http://www.guj.com.br/java/119991-megasena

http://www.guj.com.br/java/202222-codigo-para-gerar-jogo-da-mega-sena-resolvido

Use a busca do forum… :roll:

J

ta com os link que você me passou tirei algumas duvidas

sendo:

public class MegaSena {
    public int n1;
    public int n2;
    public int n3;
    public int n4;
    public int n5;
    public int n6;

    MegaSena (int n1, int n2, int n3, int n4, int n5, int n6)
    {
     this.n1 = n1;
     this.n2 = n2;
     this.n3 = n3;
     this.n4 = n4;
     this.n5 = n5;
     this.n6 = n6;
    }

    public void Sortear()
    {
        n1 = (int) (Math.random()*60);
        n2 = (int) (Math.random()*60);
        n3 = (int) (Math.random()*60);
        n4 = (int) (Math.random()*60);
        n5 = (int) (Math.random()*60);
        n6 = (int) (Math.random()*60);
    }
    public void mostrarBilhetesSorteados()
    {
        System.out.println("Jogo");
        System.out.println("Numeros Sorteados:"+n1+"-"+n2+"-"+n3+"-"+n4+"-"+n5+"-"+n6);
    }
}

mas ai ainda fica mais uma pergunta, como ficaria se o numero fosse repetido?

douglaskd

eu tive que fazer esse mesmo programa em C, mais a lógica é parecida...tente transformar em java.

#include "stdio.h"
#include "stdlib.h"

//Retorna um novo sorteio para o jogo
int *getSorteio(){
		int *sorteados = (int *) malloc(7*sizeof(int));
		int i;
		srand(time(NULL));
		do{
            for( i=0 ; i<=5 ; i++){
                sorteados[i] = (rand() % 59) +1;
            }
		}while(verificaRepetidos(sorteados));
		return sorteados;
	}
//verifica se  numeros repetidos no vetor
int verificaRepetidos(int vetor[]){
    int i,j;
    for(i=1;i<7;i++){
        for(j=1;j<i;j++){
            if(j!=i){
                if(vetor[i]==vetor[j])
                return 1;
            }
        }
    }
    return 0;
}
// Retorna o sorteio generico de forma ordenada
void ordenaSorteio(int sorteio[]){
     int i,aux,action, final=6;

     do{
     action = 0;
        for(i=0;i<final;i++){
               if(sorteio[i] > sorteio[i+1]){
                  aux = sorteio[i];
                  sorteio[i] = sorteio[i+1];
                  sorteio[i+1] = aux;
                  action++;
               }
        }
       final--;
    }while(action != 0);
}
//realiza impressão de valor por valor do vetor
void imprimeVetor(int vetor[]){
    int i;
    for(i=1;i<7;i++){
    printf("%i \t", vetor[i]);
    }
}
// retorna o numero de acertos do usuário
int numeroAcertos(int jogada[],int sorteio[]){
	int i,j;
	int acertos=0;
	for(i=1;i<7;i++){
        for(j=1;j<7;j++){
            if(jogada[i] == sorteio[j]){
                acertos++;
            }
        }
    }
    return acertos;
}

int *lerJogo(){
		int *jogo = (int *) malloc(6*sizeof(int));
		int i,j;
		int erro=0;
		int dezena;
        printf("Entre com suas dezenas\n\n");
		for( i=0 ; i<=5 ; i++){
            do{         
                erro=0;
    		    printf("Entre com a %i Dezena: ",i+1);
    		    scanf("%i",&dezena);
    		    setbuf(stdin, NULL);
     			if((dezena<1)||(dezena>60)){
                     printf("numero invalido\n");  
                     erro=1;                       
                }
                for(j=0;j<=5;j++){
                    if(dezena == jogo[j]){
                        printf("numero repetido\n");
                        erro=1;
                    }
                }
            }while(erro==1);
            jogo[i] = dezena;
		}
		return jogo;
}

void imprimeGanhos(int i,int *premio){
    switch(i){
        case 0:
        printf("desista!, nÃo acertou nenhum!!!\n");
        break;
        case 1:
        printf("nossa só 1\n");
        break;
        case 2:
        printf("ta melhorando acertos: 2\n");
        break;
        case 3:
        printf("3 acertos, mais não ganhou nenhum premio!!!\n");
        break;
        case 4:
        printf("fez quadra!!, você ganhou R$%i,00!!!\n",(int) (*premio*0.001));
        *premio = (int) *premio - (*premio*0.001);
        break;
        case 5:
        printf("Quina!,agora sim você ganhou R$%i,00!!!!!!\n",(int) (*premio*0.01));
        *premio = (int) *premio - (*premio*0.01);
        break;
        case 6:
        printf("Você é o novo Milionario, Ganhos: R$%i,00 \n", *premio);
        *premio = 0;
        break;
    }
}

int main(){
	int *sorteados;
	int *jogo;
    char opcao;
    int i=1, acertos,premio=0;

	jogo = lerJogo();
	ordenaSorteio(jogo);
	do{
	    system("cls");
	    printf("Numero do Jogo: %i \t Custo Atual: R$%i,00\n",i,i*2);
        printf("seu Bilhete:\n");
        imprimeVetor(jogo);
        printf("\n");
        printf("numeros Sorteados:\n");
        sorteados = getSorteio();
        ordenaSorteio(sorteados);
        imprimeVetor(sorteados);
        printf("\n");
        acertos = numeroAcertos(jogo,sorteados);
        premio += 2;
        printf("Numero de Acertos: %i\n\n", acertos);
        imprimeGanhos(acertos,&premio);
        i++;
        printf("deseja continuar [ENTER] ou [n] ?");
        scanf("%c",&opcao);
	}while(opcao!='n');

}
Anime

Oi,

http://www.guj.com.br/java/222477-resolvido-como-gerar-numeros-aleatorios-sem-repeticao

J

Desculpe, não entendi quase nada do algoritmo em C

agora vou fazer algumas perguntas básicas, o algoritmo que vai fazer a procura se foi sorteado um numero repetido e trocar o numero, ficaria na classe ou no main?

sou totalmente iniciante!

Obrigado pelas as ajudas

J

e mais um pergunta o algoritmo que fiz anteriormente esta totalmente errado?

douglaskd

aqui eu tenho duas funções…

a primeira aloca memoria para um novo vetor, e no final retorna os números sorteados

o do…while nele, chama a função e enquanto o vetor conter numeros repetidos, ele volta e sorteia novamente 6 numeros

int *getSorteio(){ int *sorteados = (int *) malloc(7*sizeof(int)); int i; srand(time(NULL)); do{ for( i=0 ; i<=5 ; i++){ sorteados[i] = (rand() % 59) +1; } }while(verificaRepetidos(sorteados)); return sorteados; }

ja nesta função, que é chamada pela função acima, ela faz um teste, assim que ele encontrar um numero repetido ele retorna “TRUE” 1 verdadeiro, caso contrario ele retorna “FALSE” 0 …

int verificaRepetidos(int vetor[]){ int i,j; for(i=1;i<7;i++){ for(j=1;j<i;j++){ if(j!=i){ if(vetor[i]==vetor[j]) return 1; } } } return 0; }

Criado 15 de março de 2011
Ultima resposta 16 de mar. de 2011
Respostas 7
Participantes 3