2016-11-04 15 views
6

Tôi muốn tạo một giá trị float ngẫu nhiên trong Java. Giá trị phải nằm trong phạm vi giá trị có thể cụ thể.Cách tốt nhất để tạo ra một giá trị float ngẫu nhiên được bao gồm trong một khoảng giá trị được chỉ định là gì?

Ví dụ, tôi có để tạo ra một giá trị ngẫu nhiên đó là trong phạm vi sau đây:

MIN: 41,815080 
MAX: 41,829191 

Những giá trị này xảy ra để đại diện cho một loạt các kinh độ có thể trên một bản đồ, nhưng câu hỏi áp dụng tổng quát hơn.

Cách thông minh để làm điều đó là gì?

+1

Bạn có muốn phân phối tuyến tính hoặc bình thường không? – Bohemian

Trả lời

15

Đối với một giá trị ngẫu nhiên trong một phạm vi, công thức là:

double random = min + Math.random() * (max - min); 

công thức cơ bản này là hằng số không có vấn đề gì bạn sử dụng để tạo ra các số ngẫu nhiên.

Math.random() cung cấp số vừa phải cũng phân tán, nhưng bạn có thể thay thế bằng bất kỳ bộ tạo số ngẫu nhiên mà bạn muốn, ví dụ (tốt hơn một chút):

Random r = new Random(); 
double random = min + r.nextDouble() * (max - min); 

hoặc nếu bạn thực sự muốn có một float:

float random = min + r.nextFloat() * (max - min); 

Hoặc bạn có thể sử dụng thư viện bên thứ ba kỳ lạ hơn.

5

Nếu bạn muốn tạo ra giá trị float ngẫu nhiên thử này:

import java.util.Random; 

public static float randFloat(float min, float max) { 

    Random rand = new Random(); 

    float result = rand.nextFloat() * (max - min) + min; 

    return result; 

} 

Hy vọng điều này giúp đỡ.

+1

điều này sẽ không biên dịch, cũng không hoạt động đúng. Bạn cần trả về một giá trị và giá trị trả về phải là kiểu 'float', không phải' int'. – Paul

+0

@Paul: Cảm ơn bạn đã chỉ ra. Đã sửa chữa nó :) – Techiee

+0

Upvote cho logic thực tế: float result = rand.nextFloat() * (max - min) + min; – Techiee

Các vấn đề liên quan