Dúvida em código simples Java

1 resposta
B

A proposta a seguir é de gerar números entre 1 e 5 e pegar apenas a parte inteira depois:

double n = 1 + Math.random() * (6-1);
int valor = (int) n;

Porém, não entendi, alguém poderia explicar?(sou iniciante)

Estou com o seguinte pensamento:
-Math.random() gera números entre 0.0 e 1.0 certo?
Se Math.random() gerar 1.0, o 1.0 será multiplicado por 5 e somado a +1, logo será 6!

Não entendo como esses números são gerados pois:
1 + 0,1 . 5 = 1,5
1 + 0,2 . 5 = 2,0
1 + 0,3 . 5 = 2,5
(…)

Há repetições de números, o que na minha visão não consegue gerar até 5, mas acaba gerando…
Alguém poderia ajudar? Abraços.

1 Resposta

wldomiciano

Primeiro apenas um esclarecimento, Math.random() retorna números maiores ou iguais a 0.0 e menores que 1.0, ou seja, 1.0 não está incluído, o maior número retornado seria 0.9.

Aí, seguindo sua lógica nós teríamos:

0.0 * 5   =   0.0 + 1   =   1.0
0.1 * 5   =   0.5 + 1   =   1.5
0.2 * 5   =   1.0 + 1   =   2.0
0.3 * 5   =   1.5 + 1   =   2.5
0.4 * 5   =   2.0 + 1   =   3.0
0.5 * 5   =   2.5 + 1   =   3.5
0.6 * 5   =   3.0 + 1   =   4.0
0.7 * 5   =   3.5 + 1   =   4.5
0.8 * 5   =   4.0 + 1   =   5.0
0.9 * 5   =   4.5 + 1   =   5.5

Com sucesso nós poderemos ter números dentro dos limites que esperávamos. Cada número se repete duas vezes o que quer dizer que a probabilidade de cair num certo número é igual.

No código que mostrou o que seria um problema é se os valores que esperamos fossem outros. Por exemplo, se quizéssemos números entre 5 e 10, os resultados poderiam sair errados já que:

0.0 * 10 + 5 = 5   (que é o mínimo e está OK)
0.9 * 10 + 5 = 14  (que seria o máximo mas está fora do esperado)

Por isso, para outros valores, seria melhor usar algo como isso:

Min + (int)(Math.random() * ((Max - Min) + 1))

Você pode encontrar os detalhes sobre esta implementação nessa resposta do StackOverflow.

Mas ouvi dizer que seria uma melhor prática usar a classe Random ao invés deste método que usamos acima, mas é preciso pesquisar melhor a respeito.

Criado 7 de fevereiro de 2016
Ultima resposta 8 de fev. de 2016
Respostas 1
Participantes 2