Risposte:
Per generare un valore casuale tra rangeMin
e rangeMax
:
Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
rangeMin
e rangeMax
è grande, potrebbero esserci 10.000.000 di doppi valori distinti tra loro. Il risultato di (rangeMax - rangeMin) * r.nextDouble()
sceglierà solo tra 10.000 di quei possibili 10.000.000 di valori. (Sento che questa non è una spiegazione perfetta, ma forse aiuta un po '...)
Questa domanda è stata posta prima del rilascio di Java 7, ma ora esiste un altro modo per utilizzare l'API Java 7 (e versioni successive):
double random = ThreadLocalRandom.current().nextDouble(min, max);
nextDouble
restituirà un doppio valore pseudocasuale tra il minimo (compreso) e il massimo (esclusivo). I limiti non sono necessariamente int
e possono esserlo double
.
Usa questo:
double start = 400;
double end = 402;
double random = new Random().nextDouble();
double result = start + (random * (end - start));
System.out.println(result);
MODIFICARE:
new Random().nextDouble()
: genera casualmente un numero compreso tra 0 e 1.
start
: inizio numero, per spostare il numero "a destra"
end - start
: intervallo. Casuale ti dà dallo 0% al 100% di questo numero, perché casuale ti dà un numero da 0 a 1.
EDIT 2: Tks @daniel e @aaa bbb. La mia prima risposta era sbagliata.
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.
}
}
L'idea principale di random è che restituisce un valore pseudocasuale. Non esistono funzioni completamente casuali, quindi 2 istanze casuali che utilizzano lo stesso seed restituiranno lo stesso valore in determinate condizioni.
È buona norma visualizzare prima il documento di funzione per comprenderlo ( https://docs.oracle.com/javase/8/docs/api/java/util/Random.html )
Ora che comprendiamo che il valore restituito della funzione nextDouble () è un valore pseudocasuale compreso tra 0,0 e 1,0, possiamo usarlo a nostro vantaggio.
Per creare un numero casuale tra A e B, in modo che i limiti siano validi (A> B), dobbiamo: 1. trovare l'intervallo tra A e B in modo da poter sapere quanti "passi" abbiamo. 2. usa la funzione casuale per determinare quanti passaggi intraprendere (poiché il valore restituito è compreso tra 0,0 e 1,0 puoi considerarlo come "scegli una percentuale casuale di aumento" 3. aggiungi l'offset
Dopotutto, puoi vedere che mob ti ha dato il modo più semplice e comune per farlo secondo me
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble ();
double RandomValue = Offset + (Range) * (randomVal tra 0.0-1.0)
double rangeMax= Double.MAX_VALUE;
edouble rangeMin= -rangeMax;
otterrai sempre un valore infinito in cambio. Potresti voler verificareDouble.valueOf(rangeMax-rangeMin).isInfinite()
.