JavaRush /Java Blog /Random-TW /產生給定範圍內的隨機數
L2CCCP
等級 9

產生給定範圍內的隨機數

在 Random-TW 群組發布
你好,在螢幕的另一邊。我們中的任何人遲早都會遇到需要產生給定範圍內的隨機數的情況,無論是實數還是整數。 產生給定範圍內的隨機數 - 1為了什麼?事實上,這並不重要,它可以是計算觸發某個事件的機會、獲得隨機乘數或任何其他的函數。所以,我們明白了為什麼需要這個,即任何東西:)事實上,有很多獲取偽隨機數的方法,但我會用類別來舉一個例子Math,即方法random();我們有什麼?呼叫該方法會傳回一個範圍 中的Math.random()偽隨機實數 ( ) ,即從0 到1(不包括1),這意味著範圍中的最大數字是0.99999999999... 好吧,我們得到了一個偽隨機數,但是如果我們需要自己的範圍呢?例如,我們是否需要 [0;100) 範圍內的偽隨機數? 我們編寫程式碼:double[0;1)
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;
}
結果還不錯,但max(在我們的例子中)我們仍然無法得到它。為了獲得 [0;100] 範圍內的隨機數,我們需要加1,然後將其轉換為類似or 的max整數(取決於您將使用的範圍)。 我們編寫程式碼:intlong
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);
}
注意:如您所看到的,max 變數是透過前綴形式遞增的。(如果你不知道這是什麼,我建議你閱讀我的文章)太好了,我們得到了我們想要的,但是如果我們需要一個範圍不是從0開始,而是例如[10;75] 我們寫代碼:
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;
}
從方法中解析程式碼rnd

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
計算後的最大數為65。 偽隨機實數(例如)為0.18283417347179454(透過呼叫獲得Math.random())。最大數在乘法之前以前綴形式遞增。現在最大數量為 66。將 0.18283417347179454 乘以 66。乘法結果為 12.06705544913844。我們將最大數乘以偽隨機實數的結果轉換為整數類型int。我們將最小數加到轉換結果中,等於 12。我們傳回結果: 22 從分析中可以看出,即使偽隨機實數等於 0,我們也會傳回最小值作為結果將最小數與乘法結果相加。我希望這對您有用且資訊豐富。祝你掌握 Java 好運;) 我的幾篇文章: 什麼是遞增和 遞減 模除運算符
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION