Eu tenho duas duplas como a seguinte
double min = 100;
double max = 101;
e com um gerador aleatório, preciso criar um valor duplo entre o intervalo de min e max.
Random r = new Random();
r.nextDouble();
mas não há nada aqui onde possamos especificar o intervalo.
double rangeMax= Double.MAX_VALUE;
edouble rangeMin= -rangeMax;
sempre obterá um valor infinito em troca. Você pode querer verificarDouble.valueOf(rangeMax-rangeMin).isInfinite()
.rangeMin
erangeMax
for grande, pode haver 10.000.000 valores duplos distintos entre eles. O resultado de(rangeMax - rangeMin) * r.nextDouble()
escolherá apenas entre 10.000 desses 10.000.000 valores possíveis. (Eu sinto que essa não é uma explicação perfeita, mas talvez ajude um pouco ...) #Esta pergunta foi feita antes do lançamento do Java 7, mas agora existe outra maneira possível de usar a API Java 7 (e acima):
nextDouble
retornará um valor duplo pseudoaleatório entre o mínimo (inclusivo) e o máximo (exclusivo). Os limites não são necessariamenteint
e podem serdouble
.fonte
Usa isto:
EDITAR:
new Random().nextDouble()
: gera aleatoriamente um número entre 0 e 1.start
: número inicial, para mudar o número "para a direita"end - start
: intervalo. Random fornece de 0% a 100% desse número, porque random fornece um número de 0 a 1.EDIT 2: Tks @daniel e @aaa bbb. Minha primeira resposta estava errada.
fonte
fonte
fonte
A idéia principal do aleatório é que ele retorne um valor pseudo-aleatório. Não existem funções totalmente aleatórias; portanto, 2 instâncias aleatórias que usam a mesma semente retornarão o mesmo valor em determinadas condições.
É uma boa prática visualizar primeiro o documento da função para entendê-lo ( https://docs.oracle.com/javase/8/docs/api/java/util/Random.html )
Agora que entendemos que o valor retornado da função nextDouble () é um valor pseudo-aleatório entre 0,0 e 1,0, podemos usá-lo em nosso benefício.
Para criar um número aleatório entre A e B, indicando que os limites são válidos (A> B), precisamos: 1. encontrar o intervalo entre A e B para que possamos saber quantos "passos" temos. 2. use a função aleatória para determinar quantas etapas executar (como o valor retornado está entre 0,0 e 1,0, você pode pensar nisso como "escolha uma porcentagem aleatória de aumento") 3. adicione o deslocamento
Depois de tudo isso, você pode ver que a multidão lhe deu a maneira mais fácil e comum de fazê-lo na minha opinião
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble ();
double RandomValue = Offset + (Range) * (randomVal entre 0.0-1.0)
fonte