Função Math.Random()
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!!!
[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]
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));
}
}
Renato Junior
Curtidas 0
Respostas
Alexandre Viriato
09/04/2009
[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!!!
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.
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));
}
}
GOSTEI 0
Diego Silva
09/04/2009
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.
GOSTEI 0
Carlos Heuberger
09/04/2009
[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!!!
[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?
[]]
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));
}
}
GOSTEI 0
Diego Silva
09/04/2009
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));
}
}
GOSTEI 0
Getulio Pereira
09/04/2009
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 ) );
}
}
GOSTEI 0
Carlos Heuberger
09/04/2009
[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:
Aconselho a não usar o round() -> vai gerar números entre 0 (inclusive) e 60 (inclusive), não distribuidos igualmente.
[]]
public static void main( String[] args ) {
for ( int i = 0; i < 6; i++ ) {
System.out.println("[" + i + "] = " + Math.round( Math.random() * 60 ) );
}
}
GOSTEI 0
Diego Silva
09/04/2009
[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?
GOSTEI 0
Carlos Heuberger
09/04/2009
sem o Math.round()
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.
[]]
(int) (Math.random()*60)
GOSTEI 0
Gabriel Cardelli
09/04/2009
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]) );
}
}
} GOSTEI 0
Daniel Accorsi
09/04/2009
Então, só para fazer um resumão, o grande problema do código original abaixo...
... 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 < 60;i++ ){
loteria = Math.random() * i;
System.out.println(Math.round(loteria));
}
}
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));
}
}
GOSTEI 0
Carlos Heuberger
09/04/2009
[quote="Daniel Accorsi"]Então, só para fazer um resumão, o grande problema do código original abaixo...
... 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:
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:
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));
}
}
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));
}
}
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]);
}
GOSTEI 0