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));
}
}
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 ) );
}
}
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.
[]]
[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?
09/04/2009
Carlos Heuberger
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.
[]]
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));
}
}
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".
[]]