Câu trả lời:
Để tạo một giá trị ngẫu nhiên giữa rangeMin
và rangeMax
:
Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
rangeMin
và rangeMax
lớn, thì có thể có 10.000.000 giá trị kép khác nhau giữa chúng. Kết quả (rangeMax - rangeMin) * r.nextDouble()
sẽ chỉ chọn giữa 10.000 trong số 10.000.000 giá trị có thể đó. (Tôi cảm thấy rằng đây không phải là một lời giải thích hoàn hảo, nhưng có lẽ nó sẽ giúp một chút ...)
Câu hỏi này đã được hỏi trước khi phát hành Java 7 nhưng bây giờ, có một cách khác có thể sử dụng API Java 7 (và ở trên):
double random = ThreadLocalRandom.current().nextDouble(min, max);
nextDouble
sẽ trả về giá trị gấp đôi giả ngẫu nhiên giữa mức tối thiểu (bao gồm) và tối đa (độc quyền). Các giới hạn không nhất thiết int
, và có thể double
.
Dùng cái này:
double start = 400;
double end = 402;
double random = new Random().nextDouble();
double result = start + (random * (end - start));
System.out.println(result);
BIÊN TẬP:
new Random().nextDouble()
: tạo ngẫu nhiên một số từ 0 đến 1.
start
: số bắt đầu, để chuyển số "sang phải"
end - start
: khoảng. Random cung cấp cho bạn từ 0% đến 100% số này, bởi vì Random cung cấp cho bạn một số từ 0 đến 1.
EDIT 2: Tks @daniel và @aaa bbb. Câu trả lời đầu tiên của tôi là sai.
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.
}
}
Ý tưởng chính của ngẫu nhiên là nó trả về giá trị giả ngẫu nhiên. Không có thứ gọi là các hàm hoàn toàn ngẫu nhiên, do đó, 2 trường hợp ngẫu nhiên sử dụng cùng một hạt giống sẽ trả về cùng một giá trị trong các điều kiện nhất định.
Đó là một cách thực hành tốt để xem tài liệu chức năng trước tiên để hiểu về nó ( https://docs.oracle.com/javase/8/docs/api/java/util/Random.html )
Bây giờ chúng tôi hiểu rằng giá trị được trả về của hàm nextDouble () là giá trị giả ngẫu nhiên giữa 0,0 và 1,0, chúng tôi có thể sử dụng nó để làm lợi thế cho chúng tôi.
Để tạo một số ngẫu nhiên giữa A và B givin ', các ranh giới là hợp lệ (A> B), chúng ta cần phải: 1. tìm phạm vi giữa A và B để chúng ta có thể biết cách thực hiện nhiều "bước". 2. sử dụng hàm ngẫu nhiên để xác định có bao nhiêu bước cần thực hiện (vì giá trị được trả về nằm trong khoảng từ 0,0 đến 1, bạn có thể nghĩ đó là "chọn phần trăm tăng ngẫu nhiên" 3. thêm phần bù
Sau tất cả những điều đó, bạn có thể thấy mob đã cho bạn cách dễ nhất và phổ biến nhất theo quan điểm của tôi
double RandomValue = RangeMin + (RangeMax - RangeMin) * r.nextDouble ();
double RandomValue = Offset + (Phạm vi) * (RandomVal trong khoảng 0,0-1,0)
double rangeMax= Double.MAX_VALUE;
vàdouble rangeMin= -rangeMax;
bạn sẽ luôn nhận được một giá trị vô hạn. Bạn có thể muốn kiểm traDouble.valueOf(rangeMax-rangeMin).isInfinite()
.