JavaRush /Java Blogu /Random-AZ /Verilmiş diapazonda təsadüfi bir ədəd yaradın
L2CCCP
Səviyyə

Verilmiş diapazonda təsadüfi bir ədəd yaradın

Qrupda dərc edilmişdir
Ekranın digər tərəfində salam. Hər birimiz, gec-tez, müəyyən diapazonda təsadüfi bir ədəd yaratmaq ehtiyacı ilə qarşılaşırıq, istər həqiqi ədəd, istərsə də tam ədəd. Verilmiş diapazonda təsadüfi ədədin yaradılması - 1Nə üçün? Əslində, bu vacib deyil, bu, hansısa hadisəni tetiklemek, təsadüfi çarpan almaq və ya hər hansı digər şansı hesablamaq üçün funksiya ola bilər. Beləliklə, bunun nə üçün lazım olduğunu anladıq, yəni hər hansı bir şey üçün :) Əslində, psevdo-təsadüfi nömrə əldə etmək üçün bir çox üsul var, lakin mən siniflə bir nümunə verəcəyəm Math, yəni metod random(); Nəyimiz var? Metodun çağırılması diapazondan Math.random()psevdo-təsadüfi real ədədi ( ) qaytarır , yəni 1 istisna olmaqla 0-dan 1-ə qədər, bu o deməkdir ki, diapazonda maksimum rəqəm 0,99999999999-dur... Yaxşı, biz psevdo-təsadüfi nömrə əldə etdik, lakin öz diapazonumuza ehtiyacımız olsa nə olar? Məsələn, [0;100) diapazonundan psevdor-təsadüfi nömrə lazımdırmı? Kodu yazırıq: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;
}
Pis olmadı, amma max(bizim vəziyyətimizdə) hələ də ala bilməyəcəyik. [0;100] diapazonunda təsadüfi bir ədəd əldə etmək üçün maxbizimkinə 1 əlavə etməli və sonra onu intvə ya kimi tam ədədə çevirməliyik long(istifadə edəcəyiniz diapazonlardan asılı olaraq). Kodu yazırıq:
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);
}
Qeyd: Gördüyünüz kimi max dəyişəni prefiks forması ilə artırılıb. (Əgər bunun nə olduğunu bilmirsinizsə, məqaləmi oxumağınızı məsləhət görürəm ) Əla, istədiyimizə nail olduq, amma 0-dan yox, məsələn [10;75] aralığına ehtiyacımız varsa, kodu yazırıq:
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;
}
Metoddan kodun təhlili rnd:

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
Hesablamadan sonra maksimum rəqəm 65-dir . Pseudo-təsadüfi real rəqəm (məsələn) 0,18283417347179454-dür (Zəng etməklə əldə edilmişdir Math.random()). Maksimum sayı vurmadan əvvəl prefiks forması ilə artırıldı. İndi maksimum rəqəm 66-dır. 0,18283417347179454-ü 66-ya vurun. Çarpmanın nəticəsi 12,06705544913844-dür. Maksimum ədədin psevdor təsadüfi həqiqi ədədə vurulmasının nəticəsini tam ədədə çeviririk int. Transformasiya edilmiş nəticəyə 12-yə bərabər olan minimum ədədi əlavə edirik. Nəticəni qaytarırıq: 22 Təhlildən göründüyü kimi, psevdo-təsadüfi real ədəd sıfıra bərabər olsa belə, nəticə olaraq minimumumuzu qaytaracağıq. vurma nəticəsində minimum sayımızı toplamaq. Ümid edirəm bu sizin üçün faydalı və məlumatlı oldu. Java-nı mənimsəməkdə uğurlar ;) Daha bir neçə məqaləm: Artan və azalan nədir Modul bölmə operatoru
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION