Hi there!
Estou querendo entender como funciona o Math.random().
De que forma ele consegue gerar um número aleatório apartir do exemplo abaixo.
// gera números aleatórios de 1 à 100.
int random = 1 + (int) (Math.random() * 100);
Tks.
Hi there!
Estou querendo entender como funciona o Math.random().
De que forma ele consegue gerar um número aleatório apartir do exemplo abaixo.
// gera números aleatórios de 1 à 100.
int random = 1 + (int) (Math.random() * 100);
Tks.
Então quando eu faço int random = 1 + … o 1 é um número inicial para começar/disparar a série e apartir desse número inicial que consideramos como “semente” podemos gerar uma série de números aleatórios informando até quanto com Math.random() * 100.
Seria isso ?
Waiting…
[quote=CyberX]Então quando eu faço int random = 1 + … o 1 é um número inicial para começar/disparar a série e apartir desse número inicial que consideramos como “semente” podemos gerar uma série de números aleatórios informando até quanto com Math.random() * 100.
Seria isso ?
Waiting…[/quote]
Quando tiver dúvida sobre qualquer método, leia o Javadoc:
http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#random()
Veja o que ele diz para o caso do Random:
[quote]Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0. Returned values are chosen pseudorandomly with (approximately) uniform distribution from that range.
When this method is first called, it creates a single new pseudorandom-number generator, exactly as if by the expression
new java.util.Random()
This new pseudorandom-number generator is used thereafter for all calls to this method and is used nowhere else.
This method is properly synchronized to allow correct use by more than one thread. However, if many threads need to generate pseudorandom numbers at a great rate, it may reduce contention for each thread to have its own pseudorandom-number generator.[/quote]
Agora fica fácil de entender o que você postou. O random gera um número aleatório entre 0 até 0.9999999…
Você está multiplicando esse número por 100 e convertendo para inteiro, portanto, terá uma saída entre 0 e 99.
Em seguida, você soma 1, para obter um número aleatório entre 1 e 100.
Melhor do que usar o Math.random() seria usar diretamente a classe Random. A mesma função ficaria desse jeito:
int valor = new Random().nextInt(100) + 1;
[quote=ViniGodoy]Quando tiver dúvida sobre qualquer método, leia o Javadoc:
http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#random()
Veja o que ele diz para o caso do Random:
[quote]Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0. Returned values are chosen pseudorandomly with (approximately) uniform distribution from that range.
When this method is first called, it creates a single new pseudorandom-number generator, exactly as if by the expression
new java.util.Random()
This new pseudorandom-number generator is used thereafter for all calls to this method and is used nowhere else.
This method is properly synchronized to allow correct use by more than one thread. However, if many threads need to generate pseudorandom numbers at a great rate, it may reduce contention for each thread to have its own pseudorandom-number generator.[/quote]
Agora fica fácil de entender o que você postou. O random gera um número aleatório entre 0 até 0.9999999…
Você está multiplicando esse número por 100 e convertendo para inteiro, portanto, terá uma saída entre 0 e 99.
Em seguida, você soma 1, para obter um número aleatório entre 1 e 100.
Melhor do que usar o Math.random() seria usar diretamente a classe Random. A mesma função ficaria desse jeito:
int valor = new Random().nextInt(100) + 1;
Agradeço sua explicação que por sinal foi uma explicação exemplar, mas me sugiu outra dúvida:
Por quê seria melhor ? Sei que ambos tem o mesmo resultado mas a performance é diferente ou tem algo a mais ?
Tks.
Up.
Porque a sintaxe é mais simples.
Além disso, o Random já implementa outros tipos de distribuição.
Porque a sintaxe é mais simples.
Além disso, o Random já implementa outros tipos de distribuição.[/quote]
Understood !!!
Agradeço à explicação.
Tks.