JavaRush /Java Blog /Random-KO /주어진 범위에서 난수를 생성합니다.
L2CCCP
레벨 9

주어진 범위에서 난수를 생성합니다.

Random-KO 그룹에 게시되었습니다
화면 반대편에서 안녕하세요. 우리 중 누구라도 조만간 주어진 범위에서 실수이든 정수이든 난수를 생성해야 할 필요성에 직면하게 됩니다. 주어진 범위에서 난수 생성 - 1무엇을 위해? 사실 이것은 중요하지 않습니다. 일부 이벤트가 발생할 확률을 계산하거나 임의의 승수를 얻는 등의 기능을 수행할 수 있습니다. 그래서 우리는 이것이 왜 필요한지 알아냈습니다. :) 실제로 의사 난수를 얻는 방법은 많이 있지만 클래스 Math, 즉 메소드를 사용하여 예를 들어 보겠습니다 random(). 우리는 무엇을 가지고 있습니까? 메서드를 호출하면 범위, 즉 1을 제외한 0에서 1 사이의 Math.random()의사 난수 실수( )가 반환됩니다 . 이는 범위의 최대 숫자가 0.99999999999라는 뜻입니다... 좋아요, 의사 난수를 얻었지만, 하지만 우리만의 범위가 필요하다면 어떨까요? 예를 들어, [0;100) 범위의 의사 난수가 필요합니까? 우리는 코드를 작성합니다: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] 범위의 난수를 얻으려면 max여기에 1을 더한 다음 이를 int또는 long(사용할 범위에 따라)와 같은 정수로 변환해야 합니다. 우리는 코드를 작성합니다:
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] 필요한 경우 다음과 같이 코드를 작성합니다.
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 분석에서 볼 수 있듯이 의사 난수 실수가 0이더라도 결과로 최소값을 반환합니다. 곱셈의 결과에 최소 수를 더하는 것입니다. 이것이 귀하에게 유용하고 유익한 정보였기를 바랍니다. Java를 마스터하는 행운을 빕니다 ;) 내 기사 몇 개 더: 증가 및 감소란 무엇입니까? 모듈로 나눗셈 연산자
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION