Esta é uma pergunta Java bastante simples (embora provavelmente aplicável a toda a programação):
Math.random()
retorna um número entre zero e um.
Se eu quiser retornar um número inteiro entre zero e cem, faria:
(int) Math.floor(Math.random() * 101)
Entre cem e eu faria:
(int) Math.ceil(Math.random() * 100)
Mas e se eu quisesse obter um número entre três e cinco? Será como a seguinte declaração:
(int) Math.random() * 5 + 3
Eu sei sobre nextInt()
em java.lang.util.Random
. Mas eu quero aprender como fazer isso Math.random()
.
(int)Math.floor(Math.random()*3) + 3
Math.ceil
está errado, dá o resultado errado quandoMath.random()
retorna0
.Respostas:
Saída de
randomWithRange(2, 5)
10 vezes:Os limites são inclusivos, ou seja, [2,5] e
min
devem ser menores do quemax
no exemplo acima.EDIT: Se alguém ia tentar e ser estúpido e reverter
min
emax
, você poderia alterar o código para:EDIT2: Para sua pergunta sobre
double
s, é apenas:E, novamente, se você quiser fazer uma prova idiota, é apenas:
fonte
(int)
e quiser retornar umdouble
?int
s pordouble
s (e a conversão de texto é desnecessária). Presumi que você queriaint
s, mas vou adicionar ao meu post.double
s remova o+ 1
also, poisMath.random()
não está sendo truncado. No entanto, o intervalo será [min, max), poisMath.random
"Retorna um valor duplo com um sinal positivo, maior ou igual a 0,0 e menor que 1,0". Haveria uma chance muito mínima de o número ser exatamente demax
qualquer maneira, mesmo que fosse possível.Se você deseja gerar um número de 0 a 100, seu código ficará assim:
Para gerar um número de 10 a 20:
No caso geral:
(onde
lowerbound
é inclusivo eupperbound
exclusivo).A inclusão ou exclusão de
upperbound
depende da sua escolha. Digamosrange = (upperbound - lowerbound) + 1
entãoupperbound
é inclusivo, mas serange = (upperbound - lowerbound)
, em seguida,upperbound
é exclusiva.Exemplo: Se eu quiser um número inteiro entre 3-5, se o intervalo for (5-3) +1, 5 será inclusivo, mas se o intervalo for apenas (5-3), 5 será exclusivo.
fonte
upperbound
exclusivo? Eu acho que será inclusivo.A
Random
classe de Java localizada nojava.util
pacote servirá melhor a seu propósito. Possui algunsnextInt()
métodos que retornam um número inteiro. Aquele que usa um argumento int gera um número entre 0 e esse int, o último não inclusivo.fonte
Math.random()
. Obrigado.Para gerar um número entre 10 e 20 inclusive, você pode usar
java.util.Random
fonte
Aqui está um método que recebe limites e retorna um número inteiro aleatório. É um pouco mais avançado (completamente universal): os limites podem ser positivos e negativos e os limites mínimo / máximo podem ocorrer em qualquer ordem.
Em geral, ele encontra a distância absoluta entre as bordas, obtém um valor aleatório relevante e depois muda a resposta com base na borda inferior.
fonte