JavaRush /Blog Java /Random-MS /Hasilkan nombor rawak dalam julat tertentu
L2CCCP
Tahap

Hasilkan nombor rawak dalam julat tertentu

Diterbitkan dalam kumpulan
Hello di sisi lain skrin. Mana-mana daripada kita lambat laun menghadapi keperluan untuk menjana nombor rawak dalam julat tertentu, sama ada nombor nyata atau integer. Menjana nombor rawak dalam julat tertentu - 1Untuk apa? Sebenarnya, ini tidak penting, ia boleh menjadi fungsi untuk mengira peluang mencetuskan beberapa acara, mendapatkan pengganda rawak, atau mana-mana yang lain. Oleh itu, kami mengetahui mengapa ini diperlukan, iaitu untuk apa-apa sahaja :) Sebenarnya, terdapat banyak kaedah untuk mendapatkan nombor rawak pseudo, tetapi saya akan memberikan contoh dengan kelas Math, iaitu kaedah random(); Apa yang kita ada? Memanggil kaedah Math.random()mengembalikan nombor nyata pseudo-rawak ( double) daripada julat [0;1), iaitu, dari 0 hingga 1 tidak termasuk 1, yang bermaksud nombor maksimum dalam julat ialah 0.99999999999... Okay, kami mendapat nombor rawak pseudo, tetapi bagaimana jika kita memerlukan rangkaian kita sendiri? Sebagai contoh, adakah kita memerlukan nombor pseudorandom daripada julat [0;100)? Kami menulis kod:
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;
}
Ia ternyata tidak buruk, tetapi max(dalam kes kami) kami masih tidak akan mendapatnya. Untuk mendapatkan nombor rawak dalam julat [0;100] kami perlu menambah max1 pada nombor kami dan kemudian menukarnya kepada integer seperti intatau long(bergantung pada julat yang akan anda gunakan). Kami menulis kod:
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);
}
Nota: Seperti yang anda lihat, pembolehubah maks telah ditambah dengan bentuk awalan. (Jika anda tidak tahu apa ini, saya menasihati anda untuk membaca artikel saya ) Hebat, kami mendapat apa yang kami mahu, tetapi jika kami memerlukan julat bukan dari 0, tetapi sebagai contoh [10;75] Kami menulis kod:
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;
}
Menghuraikan kod daripada kaedah rnd:

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
Nombor maksimum selepas pengiraan ialah 65. Nombor nyata rawak pseudo (contohnya) ialah 0.18283417347179454 (Diperolehi dengan memanggil Math.random()). Nombor maksimum telah ditambah dengan bentuk awalan sebelum pendaraban. Nombor maksimum sekarang ialah 66. Darab 0.18283417347179454 dengan 66. Hasil darab ialah 12.06705544913844. Kami menukar hasil pendaraban nombor maksimum dengan nombor nyata pseudorandom kepada jenis integer int. Kami menambah nombor minimum kepada hasil yang diubah iaitu sama dengan 12. Kami mengembalikan keputusan: 22 Seperti yang dapat dilihat daripada analisis, walaupun nombor nyata pseudo-rawak adalah sama dengan sifar, kami akan mengembalikan minimum kami sebagai hasilnya menambah nombor minimum kami dengan hasil pendaraban. Saya harap ini berguna dan bermaklumat untuk anda. Semoga berjaya dalam menguasai Java ;) Beberapa lagi artikel saya: Apakah itu menambah dan mengurangkan Pengendali bahagian modulo
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION