JavaRush /Java блогы /Random-KK /Берілген ауқымда кездейсоқ санды жасаңыз
L2CCCP
Деңгей

Берілген ауқымда кездейсоқ санды жасаңыз

Топта жарияланған
Экранның екінші жағында сәлем. Біздің кез келгеніміз, ерте ме, кеш пе, нақты сан немесе бүтін сан болсын, берілген диапазонда кездейсоқ санды генерациялау қажеттілігіне тап боламыз. Берілген диапазонда кездейсоқ санды генерациялау – 1Не үшін? Шын мәнінде, бұл маңызды емес, ол қандай да бір оқиғаны тудыру, кездейсоқ көбейткіш алу немесе кез келген басқа мүмкіндікті есептеуге арналған функция болуы мүмкін. Сонымен, біз мұның не үшін қажет екенін түсіндік, атап айтқанда, кез келген нәрсе үшін :) Шын мәнінде, жалған кездейсоқ санды алудың көптеген әдістері бар, бірақ мен сыныппен мысал келтіремін Math, атап айтқанда әдіс random(); Бізде не бар? Әдіске қоңырау шалу диапазоннан Math.random()жалған кездейсоқ нақты санды ( ) қайтарады , яғни 1-ді қоспағанда 0-ден 1-ге дейін, бұл ауқымдағы максималды сан 0,99999999999... Жарайды, біз жалған кездейсоқ сан алдық, бірақ Егер бізге өз ауқымымыз қажет болса ше? Мысалы, [0;100) диапазонынан жалған кездейсоқ сан керек пе? Біз codeты жазамыз: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-ді қосып , одан кейін оны немесе maxсияқты бүтін санға түрлендіру керек (қолданатын ауқымдарға байланысты). Біз codeты жазамыз: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] Біз 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;
}
Кодты әдістен талдау rnd:

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
Есептеуден кейінгі максималды сан – 65. Псевдокездейсоқ нақты сан (мысалы) 0,18283417347179454 (Қоңырау шалу арқылы алынды Math.random()). Ең көп сан көбейту алдында префикс пішінімен ұлғайтылды. Ең көп сан енді 66. 0,18283417347179454 санын 66-ға көбейтіңіз. Көбейтудің нәтижесі 12,06705544913844. Максималды санды жалған кездейсоқ нақты санға көбейту нәтижесін бүтін түрге түрлендіреміз int. Трансформацияланған нәтижеге 12-ге тең болатын ең аз санды қосамыз. Нәтижені қайтарамыз: 22 Талдаудан көрініп тұрғандай, псевдокездейсоқ нақты сан нөлге тең болса да, нәтиже ретінде минимумды қайтарамыз. көбейту нәтижесімен біздің ең аз санды қосу. Бұл сіз үшін пайдалы және ақпаратты болды деп үміттенемін. Java тілін меңгеруде сәттілік тілейміз;) Менің тағы бірнеше мақалам: Модульді бөлу операторы арттыру және азайту дегеніміз не
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION