JavaRush /Java Blog /Random-TL /Bumuo ng isang random na numero sa isang ibinigay na hana...
L2CCCP
Antas

Bumuo ng isang random na numero sa isang ibinigay na hanay

Nai-publish sa grupo
Hello sa kabilang side ng screen. Sinuman sa atin sa malao't madaling panahon ay nakatagpo ng pangangailangan na bumuo ng isang random na numero sa isang ibinigay na hanay, maging ito ay isang tunay na numero o isang integer. Pagbuo ng random na numero sa isang ibinigay na hanay - 1Para saan? Sa katunayan, hindi ito mahalaga, maaaring ito ay isang function para sa pagkalkula ng pagkakataong mag-trigger ng ilang kaganapan, makakuha ng random na multiplier, o anumang iba pa. Kaya, nalaman namin kung bakit ito kinakailangan, lalo na para sa anumang bagay :) Sa katunayan, mayroong maraming mga pamamaraan para sa pagkuha ng isang pseudo-random na numero, ngunit magbibigay ako ng isang halimbawa sa klase Math, lalo na ang pamamaraan random(); Ano ang mayroon tayo? Ang pagtawag sa pamamaraan ay Math.random()nagbabalik ng pseudo-random real number ( double) mula sa range [0;1), iyon ay, mula 0 hanggang 1 hindi kasama ang 1, na nangangahulugang ang maximum na numero sa range ay 0.99999999999... Okay, nakakuha kami ng pseudo-random na numero, ngunit paano kung kailangan natin ng sarili nating hanay? Halimbawa, kailangan ba natin ng pseudorandom na numero mula sa hanay [0;100)? Sinusulat namin ang code:
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;
}
Ito ay naging hindi masama, ngunit max(sa aming kaso) hindi pa rin namin ito makukuha. Upang makakuha ng random na numero sa hanay [0;100] kailangan naming magdagdag ng max1 sa amin at pagkatapos ay i-convert ito sa isang integer tulad intng o long(depende sa mga saklaw na iyong gagamitin). Sinusulat namin ang code:
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);
}
Tandaan: Gaya ng nakikita mo, ang max na variable ay nadagdagan ng prefix form. (Kung hindi mo alam kung ano ito, ipinapayo ko sa iyo na basahin ang aking artikulo ) Mahusay, nakuha namin ang gusto namin, ngunit kung kailangan namin ng isang saklaw na hindi mula sa 0, ngunit halimbawa [10;75] Sinusulat namin ang code:
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;
}
Pag-parse ng code mula sa pamamaraan rnd:

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
Ang maximum na numero pagkatapos ng pagkalkula ay 65. Ang pseudo-random real number (halimbawa) ay 0.18283417347179454 (Nakuha sa pamamagitan ng pagtawag Math.random()). Ang maximum na bilang ay dinagdagan ng prefix na anyo bago ang pagpaparami. Ang maximum na bilang ay 66 na. I-multiply ang 0.18283417347179454 sa 66. Ang resulta ng multiplikasyon ay 12.06705544913844. Kino-convert namin ang resulta ng pag-multiply ng maximum na numero sa pamamagitan ng pseudorandom real number sa isang integer type int. Idinaragdag namin ang pinakamababang numero sa nabagong resulta na katumbas ng 12. Ibinabalik namin ang resulta: 22 Gaya ng makikita sa pagsusuri, kahit na ang pseudo-random real number ay katumbas ng zero, ibabalik namin ang aming minimum bilang resulta. ng pagdaragdag ng aming pinakamababang numero sa resulta ng multiplikasyon. Umaasa ako na ito ay kapaki-pakinabang at nagbibigay-kaalaman para sa iyo. Good luck sa mastering Java ;) Ilan pa sa aking mga artikulo: Ano ang incrementing at decrementing The modulo division operator
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION