화면 반대편에서 안녕하세요. 우리 중 누구라도 조만간 주어진 범위에서 실수이든 정수이든 난수를 생성해야 할 필요성에 직면하게 됩니다. 무엇을 위해? 사실 이것은 중요하지 않습니다. 일부 이벤트가 발생할 확률을 계산하거나 임의의 승수를 얻는 등의 기능을 수행할 수 있습니다. 그래서 우리는 이것이 왜 필요한지 알아냈습니다. :) 실제로 의사 난수를 얻는 방법은 많이 있지만 클래스
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를 마스터하는 행운을 빕니다 ;) 내 기사 몇 개 더: 증가 및 감소란 무엇입니까? 모듈로 나눗셈 연산자
GO TO FULL VERSION