GARANTIR DESCONTO

Fórum Função Math.Random() #568530

09/04/2009

0

Preciso criar uma classe loteria com a função Math.Random() que sorteia números de 1 a 60, perfeito consegui , mas como faço para limitar o sorteio de somente 6 números, como acontece na loteria. me ajudem!!! classe abaixo!!!
 public class Loteria {  
 public static void main(String[] args) {  
       double loteria = 0.0;  
        for (int i = 1; i < 60;i++ ){  
           loteria = Math.random() * i;  
           System.out.println(Math.round(loteria));  
       }  
    } 
[color=darkblue]25/03/2009: mensagem editada por [b]simu[/b]: - adicionados os tags [b][code[/b][b]][/b] e [b][/code[/b][b]][/b] para [i]marcar [/i]o código.[/color]
Renato Junior

Renato Junior

Responder

Posts

09/04/2009

Alexandre Viriato

[quote="renlamb"]Preciso criar uma classe loteria com a função Math.Random() que [b]sorteia números de 1 a 60[/b], perfeito consegui , mas como faço para [b]limitar o sorteio de somente 6 números[/b], como acontece na loteria. me ajudem!!! classe abaixo!!!
 public class Loteria {  
 public static void main(String[] args) {  
       double loteria = 0.0;  
        for (int i = 1; i < 60;i++ ){  
           loteria = Math.random() * i;  
           System.out.println(Math.round(loteria));  
       }  
    } 
Certeza que é essa a sua dúvida? Bom se for, tá fácil. Pra sortear somente 6 números ao invés de 60, basta mudar o 60 pra 6 no for.
Responder

Gostei + 0

09/04/2009

Diego Silva

Pode ser que eu esteja errado, más se colocar o 6 ao invés do 60, o random irá sortear numeros aleatórios de 0 a 6 somente.
Responder

Gostei + 0

09/04/2009

Carlos Heuberger

[quote="renlamb"]Preciso criar uma classe loteria com a função Math.Random() que sorteia números de 1 a 60, perfeito consegui , mas como faço para limitar o sorteio de somente 6 números, como acontece na loteria. me ajudem!!! classe abaixo!!!
 public class Loteria {  
 public static void main(String[] args) {  
       double loteria = 0.0;  
        for (int i = 1; i < 60;i++ ){  
           loteria = Math.random() * i;  
           System.out.println(Math.round(loteria));  
       }  
    } 
[color=darkblue]25/03/2009: mensagem editada por [b]simu[/b]: - adicionados os tags [b][code[/b][b]][/b] e [b][/code[/b][b]][/b] para [i]marcar [/i]o código.[/color]
como é que esses números devem ser sorteados, ou seja, qual a distribuição? []]
Responder

Gostei + 0

09/04/2009

Diego Silva

Vai um exemplo de como poderia ser feito, lembrando que eu não testei pode ser que esteja errado.
public class Loteria {  
 public static void main(String[] args) {  
       double loteria[] = new double[60];  
        for (int i = 1; i < 60;i++ ){  
           loteria[i] = Math.random() * i;  
           
       }
        for (int i = 1; i < 6; i++){
          System.out.println(Math.round(loteria));
        }
    } 
Responder

Gostei + 0

09/04/2009

Getulio Pereira

A função Math.random() gera números aleatórios no intervalo [0, 1]. Pra gerar os números correspondentes à cartela MegaSena (por exemplo) , deve-se usar a seguinte combinação: Math.round( Math.random() * 60 ). Exemplo:
    public static void main( String[] args ) {

        for ( int i = 0; i < 6; i++ ) {
            System.out.println("[" + i + "] = " + Math.round( Math.random() * 60 ) );
        }

    }

Responder

Gostei + 0

09/04/2009

Carlos Heuberger

[quote="getulio.pereira"]A função Math.random() gera números aleatórios no intervalo [0, 1]. Pra gerar os números correspondentes à cartela MegaSena (por exemplo) , deve-se usar a seguinte combinação: Math.round( Math.random() * 60 ). Exemplo:
    public static void main( String[] args ) {

        for ( int i = 0; i < 6; i++ ) {
            System.out.println("[" + i + "] = " + Math.round( Math.random() * 60 ) );
        }

    }

Aconselho a não usar o round() -> vai gerar números entre 0 (inclusive) e 60 (inclusive), não distribuidos igualmente. []]
Responder

Gostei + 0

09/04/2009

Diego Silva

[quote="simu"]Aconselho a não usar o round() -> vai gerar números entre 0 (inclusive) e 60 (inclusive), não distribuidos igualmente. []]
Na sua opnião, qual a maneira mais viavel?
Responder

Gostei + 0

09/04/2009

Carlos Heuberger

sem o Math.round()
(int) (Math.random()*60)
resulta em números randómicos inteiros igualmente distribuidos entre 0 e [b]59[/b] (inclusive) (não sei se é essa distribuição que quer...) Um pouco mais complicado é evitar o sorteio de numeros repetidos... mas isso já foi discutido no fórum. Dica: usar uma lista com todos os números (elementos) a serem sorteados; e retirar cada número que for sorteado da lista antes de sortear o próximo. []]
Responder

Gostei + 0

09/04/2009

Gabriel Cardelli

import java.text.*;
public class Loteria
{     
 public static void main(String[] args)
 {     
	 	
	   DecimalFormat formata = new DecimalFormat("00");
	   int r = 60;
       double loteria[] = new double[7];     
        for (int i = 1; i <= 6;i++ )
        {     
           loteria[i] = Math.random() * r;
        }
         for (int i = 1 ; i <= 6 ; i++)
         {
        	 System.out.println( formata.format(loteria[i]) );
         }
  }    
} 
Consegui fazer assim!!
Responder

Gostei + 0

09/04/2009

Daniel Accorsi

Então, só para fazer um resumão, o grande problema do código original abaixo...
  public class Loteria {    
  public static void main(String[] args) {    
        double loteria = 0.0;    
         for (int i = 1; i < 60;i++ ){    
            loteria = Math.random() * i;    
            System.out.println(Math.round(loteria));    
        }    
     }
... foi que ele deveria ter feito um "for" de somente 1 a 6 para sortear 6 números e no Math.random() deveria estar "* 60" e não a variável "i". Certo?? Ficando assim:
  public class Loteria {    
  public static void main(String[] args) {    
        double loteria = 0.0;    
         for (int i = 1; i < 6;i++ ){    
            loteria = Math.random() * 60;    
            System.out.println(Math.round(loteria));    
        }    
     }
Responder

Gostei + 0

09/04/2009

Carlos Heuberger

[quote="Daniel Accorsi"]Então, só para fazer um resumão, o grande problema do código original abaixo...
  public class Loteria {    
  public static void main(String[] args) {    
        double loteria = 0.0;    
         for (int i = 1; i < 60;i++ ){    
            loteria = Math.random() * i;    
            System.out.println(Math.round(loteria));    
        }    
     }
... foi que ele deveria ter feito um "for" de somente 1 a 6 para sortear 6 números e no Math.random() deveria estar "* 60" e não a variável "i". Certo?? Ficando assim:
  public class Loteria {    
  public static void main(String[] args) {    
        double loteria = 0.0;    
         for (int i = 1; i < 6;i++ ){    
            loteria = Math.random() * 60;    
            System.out.println(Math.round(loteria));    
        }    
     }
como já escrevi (será que tó me repetindo demais?) o uso do round() vai gerar uma distribuição não linear (não sei se é o nome correto). 1° irá obter números entre [color=red][b] 0 [/b][/color] (inclusive) e 60 (inclusive), ou seja, 61 números 2° P(0) = 1/120 (probabilidade do zero) P(1), P(2), ... P(59) = 1/60 (probabilidade de um número entre 1 e 59) P(60) = 1/120 (probabilidade de resultar 60) Verificação:
        int[] hist = new int[61];
        for ( int i = 0; i < 12000; i++ ) {
            int v = (int) Math.round( Math.random() * 60 );
            hist[v] += 1;
        }
        for (int i = 0; i < hist.length; i++) {
            System.out.printf("%3d: %d%n", i, hist[i]);
        }
Não conheço essa Loteria, mas o tópico inicial era para fazer um algoritmo que "sorteia números de [color=red][b] 1 [/b][/color] a 60". []]
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar