Respostas:
Para gerar um valor aleatório entre rangeMin
e rangeMax
:
Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
rangeMin
e rangeMax
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):
double random = ThreadLocalRandom.current().nextDouble(min, max);
nextDouble
retornará um valor duplo pseudoaleatório entre o mínimo (inclusivo) e o máximo (exclusivo). Os limites não são necessariamente int
e podem ser double
.
Usa isto:
double start = 400;
double end = 402;
double random = new Random().nextDouble();
double result = start + (random * (end - start));
System.out.println(result);
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.
import java.util.Random;
public class MyClass {
public static void main(String args[]) {
Double min = 0.0; // Set To Your Desired Min Value
Double max = 10.0; // Set To Your Desired Max Value
double x = (Math.random() * ((max - min) + 1)) + min; // This Will Create A Random Number Inbetween Your Min And Max.
double xrounded = Math.round(x * 100.0) / 100.0; // Creates Answer To The Nearest 100 th, You Can Modify This To Change How It Rounds.
System.out.println(xrounded); // This Will Now Print Out The Rounded, Random Number.
}
}
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)
double rangeMax= Double.MAX_VALUE;
edouble rangeMin= -rangeMax;
sempre obterá um valor infinito em troca. Você pode querer verificarDouble.valueOf(rangeMax-rangeMin).isInfinite()
.