Loteria em JAVA

É o seguinte, tou fazendo um projeto pra faculdade e meu código ta dando um erro no main, falta algumas
coisas nele que vou comentar em seguida, quem puder me ajudar desde já estou agradecodo.

import java.util.Scanner;

public class MegaSenaApostas {
    //variaveis
	double p1;
	double p2;
	double p3;
	int s1;
	int s2;
	int s3;
	int s4;
	int s5;
	int s6;
	int i;
	int ok;
	int pt;
	int y;
	int n1 = (int) (1+Math.random()*100);
	int n2 = (int) (1+Math.random()*100);
	int n3 = (int) (1+Math.random()*100);
	int n4 = (int) (1+Math.random()*100);
    int n5 = (int) (1+Math.random()*100);
	int n6 = (int) (1+Math.random()*100);
	
	public void sorteiaNumeros(){
	
		int y = 0;
		
		//aqui eu guardo os números sorteados
		int[] numerosSorteados = new int[y];{
		for (y=0; y<5; y++){
			numerosSorteados[y]= n1;
			numerosSorteados[y]= n2;
			numerosSorteados[y]= n3;
			numerosSorteados[y]= n4;
			numerosSorteados[y]= n5;
			numerosSorteados[y]= n6;
		}}
	}	
	// aqui guardo os números apostados
	public void guardaNumeros(){
		
	int [] numerosApostados = new int [i]; {
		for (i=0; i<5; i++);
		numerosApostados[i]= s1;
		numerosApostados[i]= s2;
		numerosApostados[i]= s3;
		numerosApostados[i]= s4;
		numerosApostados[i]= s5;
		numerosApostados[i]= s6;
	}	
}
	//aqui eu informo o prêmio total
   public void premioTotal(){
	   Scanner input  = new Scanner (System.in);
	   System.out.println ("Informe o valor do prêmio: ");
	   pt = input.nextInt();
	}
	// divido o prêmio entre os ganhadores
	public void divisaoPremios (){
		p1= 75/100*pt;
		p2= 20/100*pt;
		p3= 5/100*pt;
	}
	
	//recebo os números da aposta
   public void recebeNumeros(){
	   Scanner input  = new Scanner (System.in); 
   System.out.println("Informe o primeiro numero a ser apostado: ");
   s1 = input.nextInt();
   System.out.println("Informe o segundo numero a ser apostado: ");
   s2 = input.nextInt();
   System.out.println("Informe o terceiro numero a ser apostado: ");
   s3 = input.nextInt();
   System.out.println("Informe o quarto numero a ser apostado: ");
   s4 = input.nextInt();
   System.out.println("Informe o quinto numero a ser apostado: ");
   s5 = input.nextInt();
   System.out.println("Informe o sexto numero a ser apostado: ");
   s6 = input.nextInt();  
   }
	
   //comparo os numeros sorteados e apostados para definir se a ganhadores
   public  void comparaNumeros(){
	   ok=0;
	   if ((s1==n1)||(s1==n2)||(s1==n3)||(s1==n4)||(s1==n5)||(s1==n6)){
		   ok+=1;
	   }
	   if((s2==n1)||(s2==n2)||(s2==n3)||(s2==n4)||(s2==n5)||(s2==n6)){
		   ok+=1;
	   }
	   if((s3==n1)||(s3==n2)||(s3==n3)||(s3==n4)||(s3==n5)||(s3==n6)){
		   ok+=1;
	   }
	   if((s4==n1)||(s4==n2)||(s4==n3)||(s4==n4)||(s4==n5)||(s4==n6)){
		   ok+=1;
	   }
	   if((s5==n1)||(s5==n2)||(s5==n3)||(s5==n4)||(s5==n5)||(s5==n6)){
		   ok+=1;
	   }
	   if((s6==n1)||(s6==n2)||(s6==n3)||(s6==n4)||(s6==n5)||(s6==n6)){
		   ok+=1;
	   }  
	  
	   
	   }
	   
   // defino os ganhadores e seus premios
   public  void definindoGanhadores(){
	   if (ok==1){
		   System.out.print ("Try again!");
	   }
	   if (ok==2){
		   System.out.print ("Try again!");
	   }
	   if (ok==3){
		   System.out.print ("Try again!");
	   }
	   if (ok==4){
		   System.out.print ("Parabéns você vai ganhar: "+ p3);
	   }
	   if (ok==5){
		   System.out.print ("Parabéns você vai ganhar: "+ p2);
	   }
	   if (ok==6){
		   System.out.print ("Você é um puta cagado e vai ganhar: "+ p1);
	   }
	   
   }   
      

}
	

Tbm tenho uma duvida em relação em como fazer pra serem feitos vários jogos, sendo que os números são especificos em cada jogo
sem que um aposta pegue o número de uma outra aposta, críticas seram bem vindas em relação ao meu código, ^^

manda a stacktrace ai…

Oi Rafael,

Primeiramente, qual o problema com o seu código? Algum erro? Não compilei ele aqui para testar.

Algumas observações/sugestões:

1 - O sorteio dos números aleatórios não está correto. Pode acontecer de haver dois números sorteados iguais. Uma dica para gerar tais números seria vc criar um array, com 60 posições (megasena é até 60 e não 100), preencher cada posição com um valor em ordem (n[0] = 1; n[1] = 2, n[2] = 3, …, n[59] = 60) e embaralhá-lo. Então pegue as 6 primeiras posições do array para ser os números sorteados.

[code]// cria os valores
int[] valores = new int[60];
for ( int i = 0; i < valores.length; i++ ) {
valores[i] = i+1;
}

// embaralha
int temp = 0;
int posicaoTroca = 0;
for ( int i = 0; i < valores.length; i++ ) {
posicaoTroca = (int) (Math.random()*60); // 0 a 59
temp = valores[i];
valores[i] = valores[posicaoTroca];
valores[posicaoTroca] = temp;
}

// cria os números sorteados
int[] numerosSorteados = new int[6];
for ( int i = 0; i < numerosSorteados.length; i++ ) {
numerosSorteados[i] = valores[i];
}[/code]
2 - O método comparaNumeros pode ser melhorado. Faça um for que percorra os numeros sorteados e compare com os valores inseridos pelo usuário. Se os valores forem iguais, vc incrementa a variável ok. Exemplo:

for ( int i = 0; i < numerosApostados.length; i++ ) { for ( int j = 0; j < numerosSorteados.length; j++ ) { if ( numerosApostados[i] == numerosSorteados[j] ) { ok++; break; } } }
3 - Substitua a lógica de ifs do método definindoGanhadores por um switch.
4 - Crie um método chamado novoJogo, que chama os métodos premioTotal, divisaoPremios, sorteiaNumeros, recebeNumeros, guardaNumeros, comparaNumeros e definindoGanhadores (nessa ordem).
5 - Faça um while que testa uma variável que vai indicar se o jogador quer jogar de novo. Caso queira, chame o novoJogo, caso contrário, termine o programa.

[]´s

Obrigado David,

mas o erro é o seguinte, ele denuncia um erro em tempo de execução denunciando a inexistencia do main,
para resolver tal problema meu prof de POO disse para eu criar uma nova classe com o main que chamasse
um metódo que iniciasse toda a execução, bom pelo menos foi isso que eu entendi, mas não consegui faze-lo
aqui.

Bom, em relação aos ifs caso eles funcionem vou deixar eles assim mesmo, obrigado pela dica.
em relação a esse while pra repitir a operação pensei nessa forma de fazer, posso fazer uma variavel do tipo boolean para faze-lo? se sim como poderia proceder?
esse novo jogo, posso jogalo em uma nova classe dentro do main pra resolver meu problema?

Obrigado desde já.

Jogo.java

[code]public class Jogo {

public static void main( String[] args ) {

    boolean continuar = true;

    while ( continuar ) {
        MegaSenaApostas jogo = new MegaSenaApostas();
        jogo.premioTotal();
        jogo.divisaoPremios();
        jogo.sorteiaNumeros(); 
        jogo.recebeNumeros();
        jogo.guardaNumeros();
        jogo.comparaNumeros();
        jogo.definindoGanhadores();

        // verifica se o jogador quer continuar
        // caso sim, continuar = true, caso contrário
        // continuar = false
    }

    // como eu disse, vc pode encapsular os 7 métodos 
    // anteriores em um único método e chamar apenas ele
    // ou seja, um oitavo método que chama os outros 7 dentro dele

}

}[/code]

Muitissimo obrigado david, bom agora vou fazer só umas modificações aqui e dormir.

Amanhã tenho resultado de uma prova de php, #BRONCA

Bom boa noite, e até a próxima,

Disponha :slight_smile:
Boa sorte na prova hehe

[]´s

Tou revivendo esse tópico pois ainda tenho problemas com ele, e não iria criar outro tópico já que já existe esse bem, vamos lá.


import java.util.Scanner;

public class MegaSenaApostas {
    //variaveis
	double p1;
	double p2;
	double p3;
	int s1;
	int s2;
	int s3;
	int s4;
	int s5;
	int s6;
	int i;
	int ok;
	int pt;
	int y;

	
	public void sorteiaNumeros(){
		int[] valores = new int[60];
		for ( int i = 0; i < valores.length; i++ ) {
		    valores[i] = i+1;
		}

		// embaralha
		int temp = 0;
		int posicaoTroca = 0;
		for ( int i = 0; i < valores.length; i++ ) {
		    posicaoTroca = (int) (Math.random()*60); // 0 a 59
		    temp = valores[i];
		    valores[i] = valores[posicaoTroca];
		    valores[posicaoTroca] = temp;
		}

		
		
		//aqui eu guardo os números sorteados
		int[] numerosSorteados = new int[y];{
			for ( int i = 0; i < numerosSorteados.length; i++ ) {
			    numerosSorteados[i] = valores[i];
			}}
	}	
	// aqui guardo os números apostados
	public void guardaNumeros(){
		
	int [] numerosApostados = new int [i]; {
		for (i=0; i<5; i++);
		numerosApostados[i]= s1;
		numerosApostados[i]= s2;
		numerosApostados[i]= s3;
		numerosApostados[i]= s4;
		numerosApostados[i]= s5;
		numerosApostados[i]= s6;
	}	
}
	//aqui eu informo o prêmio total
   public void premioTotal(){
	   Scanner input  = new Scanner (System.in);
	   System.out.println ("Informe o valor do prêmio: ");
	   pt = input.nextInt();
	}
	// divido o prêmio entre os ganhadores
	public void divisaoPremios (){
		p1= 75/100*pt;
		p2= 20/100*pt;
		p3= 5/100*pt;
	}
	
	//recebo os números da aposta
   public void recebeNumeros(){
	   Scanner input  = new Scanner (System.in); 
   System.out.println("Informe o primeiro numero a ser apostado: ");
   s1 = input.nextInt();
   System.out.println("Informe o segundo numero a ser apostado: ");
   s2 = input.nextInt();
   System.out.println("Informe o terceiro numero a ser apostado: ");
   s3 = input.nextInt();
   System.out.println("Informe o quarto numero a ser apostado: ");
   s4 = input.nextInt();
   System.out.println("Informe o quinto numero a ser apostado: ");
   s5 = input.nextInt();
   System.out.println("Informe o sexto numero a ser apostado: ");
   s6 = input.nextInt();  
   }
	
   //comparo os numeros sorteados e apostados para definir se a ganhadores
   public  void comparaNumeros()                                               // correção, se jogar os dois metódos abaixo ele corrige o erro, mas só aceita um metodo o outro permanece com erro.
   for ( int i = 0; i < numerosApostados.length; i++ ) {                                     // Ou seja ele ficara assim, public void comparaNumeros (numerosApostados, numerosSorteados) ,  mas o erro persiste em um deles, no caso o numerosSorteados
	    for ( int j = 0; j < numerosSorteados.length; j++ ) {                   // nessa linha ele da erro pois não reconhece o numerosApostados
	        if ( numerosApostados[i] == numerosSorteados[j] ) {           // Mesmo erro que o de cima, como posso resolve-lo?
	            ok++;
	            break;
	        }
	    }
	}}
	   
   // defino os ganhadores e seus premios
   public  void definindoGanhadores(){
	   if (ok==1){
		   System.out.print ("Try again!");
	   }
	   if (ok==2){
		   System.out.print ("Try again!");
	   }
	   if (ok==3){
		   System.out.print ("Try again!");
	   }
	   if (ok==4){
		   System.out.print ("Parabéns você vai ganhar: "+ p3);
	   }
	   if (ok==5){
		   System.out.print ("Parabéns você vai ganhar: "+ p2);
	   }
	   if (ok==6){
		   System.out.print ("Você é um puta cagado e vai ganhar: "+ p1);
	   }
	   }   
   
   
}
public class MegaSena {
   
    
    public static void main( String[] args ) {

        boolean continuar = true;

        while ( continuar ) {
            MegaSenaApostas jogo = new MegaSenaApostas();
            jogo.premioTotal();
            jogo.divisaoPremios();
            jogo.sorteiaNumeros(); 
            jogo.recebeNumeros();
            jogo.guardaNumeros();
            jogo.comparaNumeros();
            jogo.definindoGanhadores();
                     
            
            // verifica se o jogador quer continuar
            // caso sim, continuar = true, caso contrário
            // continuar = false
        }

        // como eu disse, vc pode encapsular os 7 métodos 
        // anteriores em um único método e chamar apenas ele
        // ou seja, um oitavo método que chama os outros 7 dentro dele

    }

}

Eu não posso separar o metodo de comparação de numéros e definição de gahnadores em outro metodo?
pois nesse caso ai, pela minha lógica ele só recebe uma aposta, e ja compara com o sorteio
quando na verdade eu quero receber várias apostas e após o usuario confirmar o fim delas ai sim compara
os numeros e roda a definição de ganhadores.

Detalhe esse código está sem banco de dados, posso criar uma váriavel que “guarde” o código desse jogo para que no final eu possa informar o código da aposta ganhadora?
Caso sim, como posso proceder?

Caso eu faça um array de array nos numeros apostados posso definir um limite máximo de apostas corrreto?

Mas se eu fizer isso, irá atrapalhar algum outro metódo, pela lógica acho que sim.

Alguem da uma luz aew, XD

Apesar de ninguem ter respondido, tou com um problema nessa classe:

import java.util.Scanner;


public class DuplaSenaApostas {
    //variaveis
	double p1;
	double p2;
	double p3;
	int s1;
	int s2;
	int s3;
	int s4;
	int s5;
	int s6;
	int i;
	int ok;
	int pt;
	int y;
    
	
	public void duplaSorteiaNumeros(){
		int[] valores = new int[60];
		for ( int i = 0; i < valores.length; i++ ) {
		    valores[i] = i+1;
		}

		// embaralha
		int temp = 0;
		int posicaoTroca = 0;
		for ( int i = 0; i < valores.length; i++ ) {
		    posicaoTroca = (int) (Math.random()*60); // 0 a 59
		    temp = valores[i];
		    valores[i] = valores[posicaoTroca];
		    valores[posicaoTroca] = temp;
		}

		
		
		//aqui eu guardo os números sorteados
		int[] duplaNumerosSorteados = new int[y];{
			for ( int i = 0; i < duplaNumerosSorteados.length; i++ ) {
				duplaNumerosSorteados[i] = valores[i];
			}}
	}	
	// aqui guardo os números apostados
	public void duplaGuardaNumeros(){
		
	int [] duplaNumerosApostados = new int [i]; {
		for (i=0; i<5; i++);
		duplaNumerosApostados[i]= s1;
		duplaNumerosApostados[i]= s2;
		duplaNumerosApostados[i]= s3;
		duplaNumerosApostados[i]= s4;
		duplaNumerosApostados[i]= s5;
		duplaNumerosApostados[i]= s6;
	}	
}
	//aqui eu informo o prêmio total
   public void duplaPremioTotal(){
	   Scanner input  = new Scanner (System.in);
	   System.out.println ("Informe o valor do prêmio: ");
	   pt = input.nextInt();
	}
	// divido o prêmio entre os ganhadores
	public void duplaDivisaoPremios (){
		p1= 75/100*pt;
		p2= 20/100*pt;
		p3= 5/100*pt;
	}
	
	//recebo os números da aposta
   public void duplaRecebeNumeros(){
	   Scanner input  = new Scanner (System.in); 
   System.out.println("Informe o primeiro numero a ser apostado: ");
   s1 = input.nextInt();
   System.out.println("Informe o segundo numero a ser apostado: ");
   s2 = input.nextInt();
   System.out.println("Informe o terceiro numero a ser apostado: ");
   s3 = input.nextInt();
   System.out.println("Informe o quarto numero a ser apostado: ");
   s4 = input.nextInt();
   System.out.println("Informe o quinto numero a ser apostado: ");
   s5 = input.nextInt();
   System.out.println("Informe o sexto numero a ser apostado: ");
   s6 = input.nextInt();  
   }
	
   //comparo os numeros sorteados e apostados para definir se a ganhadores
   public  void duplaComparaNumeros(){
   for ( int i = 0; i < duplaNumerosApostados.length; i++ ) {
	    for ( int j = 0; j < duplaNumerosSorteados.length; j++ ) {
	        if ( duplaNumerosApostados[i] == duplaNumerosSorteados[j] ) {
	            ok++;
	            break;
	        }
	    }
	}}
	   
   // defino os ganhadores e seus premios
   public  void duplaDefinindoGanhadores(){
	   if (ok==1){
		   System.out.print ("Try again!");
	   }
	   if (ok==2){
		   System.out.print ("Try again!");
	   }
	   if (ok==3){
		   System.out.print ("Try again!");
	   }
	   if (ok==4){
		   System.out.print ("Parabéns você vai ganhar: "+ p3);
	   }
	   if (ok==5){
		   System.out.print ("Parabéns você vai ganhar: "+ p2);
	   }
	   if (ok==6){
		   System.out.print ("Você é um puta cagado e vai ganhar: "+ p1);
	   }
	   }   
   
   
}

Quero que haja 2 sorteios, mas num sei se do geito que tou pensando ele vai salvar e comparar depois, alguem ajuda?