JavaRush /Java blogi /Random-UZ /Berilgan diapazonda tasodifiy sonni yarating
L2CCCP
Daraja

Berilgan diapazonda tasodifiy sonni yarating

Guruhda nashr etilgan
Ekranning boshqa tomonida salom. Har birimiz, ertami-kechmi, ma'lum bir diapazonda, xoh u haqiqiy yoki butun son bo'lsin, tasodifiy sonni yaratish zaruriyatiga duch kelamiz. Berilgan diapazonda tasodifiy sonni yaratish - 1Sabab? Aslida, bu muhim emas, bu biron bir hodisani qo'zg'atish, tasodifiy multiplikatorni olish yoki boshqa har qanday imkoniyatni hisoblash funktsiyasi bo'lishi mumkin. Shunday qilib, biz bu nima uchun kerakligini aniqladik, ya'ni har qanday narsa uchun :) Aslida, psevdo-tasodifiy raqamni olishning ko'plab usullari mavjud, ammo men sinf bilan misol keltiraman Math, ya'ni usul random(); Bizda nima bor? Usulni chaqirish diapazondan Math.random()psevdotasodifiy haqiqiy raqamni ( ) qaytaradi , ya'ni 1 dan tashqari 0 dan 1 gacha, ya'ni diapazondagi maksimal raqam 0,99999999999... Yaxshi, biz psevdo-tasodifiy raqamni oldik, lekin Agar bizga o'z diapazoni kerak bo'lsa-chi? Masalan, [0;100) diapazonidan psevdor tasodifiy raqam kerakmi? Biz kodni yozamiz: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;
}
Bu yomon emas edi, lekin max(bizning holatlarimizda) biz hali ham buni olmaymiz. [0;100] oralig'ida tasodifiy sonni olish uchun biz maxo'zimiznikiga 1 qo'shishimiz va keyin uni intyoki kabi butun songa aylantirishimiz kerak long(siz foydalanadigan diapazonlarga qarab). Biz kodni yozamiz:
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);
}
Eslatma: Ko'rib turganingizdek, max o'zgaruvchisi prefiks shakli bilan oshirildi. (Agar bu nima ekanligini bilmasangiz, sizga maqolamni o'qishni maslahat beraman ) Ajoyib, biz xohlagan narsaga erishdik, lekin agar bizga 0 dan emas, balki diapazon kerak bo'lsa, masalan [10;75] Biz kodni yozamiz:
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;
}
Kodni usuldan ajratish rnd:

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
Hisoblashdan keyingi maksimal raqam - 65. Pseudo-tasodifiy haqiqiy raqam (masalan) 0,18283417347179454 (Qo'ng'iroq qilish orqali olingan Math.random()). Ko'paytirishdan oldin maksimal raqam prefiks shakli bilan oshirildi. Endi maksimal raqam 66. 0,18283417347179454 ni 66 ga ko'paytiring. Ko'paytirish natijasi 12,06705544913844. Maksimal sonni psevdor tasodifiy haqiqiy songa ko'paytirish natijasini butun son turiga aylantiramiz int. O'zgartirilgan natijaga 12 ga teng bo'lgan minimal sonni qo'shamiz. Natijani qaytaramiz: 22 Tahlildan ko'rinib turibdiki, psevdotasodifiy haqiqiy son nolga teng bo'lsa ham, natijada biz minimumimizni qaytaramiz. ko'paytirish natijasi bilan bizning minimal sonimizni qo'shish. Umid qilamanki, bu siz uchun foydali va ma'lumotli bo'ldi. Java-ni o'zlashtirishda omad tilaymiz;) Yana bir nechta maqolalarim: O'sish va kamaytirish nima? Modullarni bo'linish operatori
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION