JavaRush /Blog Java /Random-VI /Tạo một số ngẫu nhiên trong một phạm vi nhất định
L2CCCP
Mức độ

Tạo một số ngẫu nhiên trong một phạm vi nhất định

Xuất bản trong nhóm
Xin chào ở phía bên kia của màn hình. Bất kỳ ai trong chúng ta sớm hay muộn cũng gặp phải nhu cầu tạo một số ngẫu nhiên trong một phạm vi nhất định, có thể là số thực hoặc số nguyên. Tạo một số ngẫu nhiên trong một phạm vi nhất định - 1Để làm gì? Trên thực tế, điều này không quan trọng, nó có thể là một hàm để tính toán cơ hội kích hoạt một số sự kiện, nhận hệ số ngẫu nhiên hoặc bất kỳ hàm nào khác. Vì vậy, chúng tôi đã tìm ra lý do tại sao điều này lại cần thiết, cụ thể là cho mọi thứ :) Trên thực tế, có rất nhiều phương pháp để lấy số giả ngẫu nhiên, nhưng tôi sẽ đưa ra một ví dụ với lớp Math, cụ thể là phương thức random(); Những gì chúng ta có? Việc gọi phương thức Math.random()trả về một số thực giả ngẫu nhiên ( double) từ phạm vi [0;1), nghĩa là từ 0 đến 1 không bao gồm 1, có nghĩa là số tối đa trong phạm vi là 0,99999999999... Được rồi, chúng ta có một số giả ngẫu nhiên, nhưng nếu chúng ta cần phạm vi riêng của mình thì sao? Ví dụ: chúng ta có cần số giả ngẫu nhiên trong phạm vi [0;100) không? Chúng tôi viết mã:
public static void main(String... args)
{
	final double max = 100.; // Максимальное число для диапазона от 0 до max
	final double rnd = rnd(max);

	System.out.println("Псевдослучайное вещественное число: " + rnd);
}

/**
 * Метод получения псевдослучайного вещественного числа от 0 до max (исключая max);
 */
public static double rnd(final double max)
{
	return Math.random() * max;
}
Hóa ra nó không tệ, nhưng max(trong trường hợp của chúng tôi) chúng tôi vẫn không hiểu được. Để có được một số ngẫu nhiên trong phạm vi [0;100], chúng ta cần thêm max1 vào số của mình rồi chuyển đổi nó thành một số nguyên như inthoặc long(tùy thuộc vào phạm vi bạn sẽ sử dụng). Chúng tôi viết mã:
public static void main(String... args)
{
	final int max = 100; // Максимальное число для диапазона от 0 до max
	final int rnd = rnd(max);

	System.out.println("Псевдослучайное целое число: " + rnd);
}

/**
 * Метод получения псевдослучайного целого числа от 0 до max (включая max);
 */
public static int rnd(int max)
{
	return (int) (Math.random() * ++max);
}
Lưu ý: Như bạn có thể thấy, biến max đã được tăng theo dạng tiền tố. (Nếu bạn không biết đây là gì, tôi khuyên bạn nên đọc bài viết của tôi ) Tuyệt vời, chúng tôi đã có được thứ mình muốn, nhưng nếu chúng tôi cần một phạm vi không phải từ 0, mà là ví dụ [10;75] Chúng tôi viết mã:
public static void main(String... args)
{
	final int min = 10; // Минимальное число для диапазона
	final int max = 75; // Максимальное число для диапазона
	final int rnd = rnd(min, max);

	System.out.println("Псевдослучайное целое число: " + rnd);
}

/**
 * Метод получения псевдослучайного целого числа от min до max (включая max);
 */
public static int rnd(int min, int max)
{
	max -= min;
	return (int) (Math.random() * ++max) + min;
}
Phân tích mã từ phương thức rnd:

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
Số tối đa sau khi tính toán là 65. Số thực giả ngẫu nhiên (ví dụ) là 0,18283417347179454 (Có được bằng cách gọi Math.random()). Số lượng tối đa được tăng lên bằng dạng tiền tố trước khi nhân. Số tối đa bây giờ là 66. Nhân 0,18283417347179454 với 66. Kết quả của phép nhân là 12,06705544913844. Chúng tôi chuyển đổi kết quả của phép nhân số tối đa với số thực giả ngẫu nhiên thành loại số nguyên int. Chúng tôi thêm số tối thiểu vào kết quả được chuyển đổi bằng 12. Chúng tôi trả về kết quả: 22 Như có thể thấy từ phân tích, ngay cả khi số thực giả ngẫu nhiên bằng 0, kết quả là chúng tôi sẽ trả về mức tối thiểu của mình về việc cộng số tối thiểu của chúng ta với kết quả của phép nhân. Tôi hy vọng điều này hữu ích và mang tính thông tin cho bạn. Chúc may mắn thành thạo Java ;) Thêm một vài bài viết của tôi: Tăng và giảm là gì Toán tử chia modulo
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION