랜덤 클래스 (java.util)
랜덤 클래스에서 구현 된 랜덤 알고리즘은 의사 랜덤, 즉 규칙이있는 무작위입니다. 무작위 배정을 수행 할 때 무작위 알고리즘의 원점 수를 종자라고하며, 이는 시드에 기초하여 특정 변환을 수행하여 필요한 임의 숫자를 생성합니다.
같은 수의 씨앗을 가진 임의의 물체, 동일한 숫자로 생성 된 임의의 숫자는 정확히 동일합니다. 다시 말해, 시드 숫자가 동일한 두 개의 임의의 물체의 경우 처음으로 생성 된 임의의 숫자는 정확히 동일하며 두 번째로 생성 된 임의 숫자는 정확히 동일합니다. 이를 위해서는 여러 랜덤 숫자를 생성 할 때 특별한주의가 필요합니다.
다음은 랜덤 클래스의 사용과 지정된 구간의 랜덤 배열을 생성하는 방법과 구현 프로그램에 필요한 기회를 설명합니다.
1. 임의의 물체 생성
랜덤 클래스에는 두 개의 생성자가 포함되어 있으며 아래 순서대로 도입됩니다.
에이. 공개 랜덤 ()
이 구조 방법은 시드 번호로 현재 시스템 시간에 해당하는 상대 시간과 관련된 숫자를 사용한 다음이 시드 번호를 사용하여 임의의 물체를 구성합니다.
비. 공개 무작위 (긴 씨앗)
이 생성자는 시드 번호를 공식화하여 만들 수 있습니다.
샘플 코드 :
코드 사본은 다음과 같습니다.
랜덤 r = 새로운 랜덤 ();
랜덤 R1 = 새로운 랜덤 (10);
다시 : 씨앗의 수는 랜덤 알고리즘의 원점 수이며 생성 된 랜덤 숫자의 간격과 관련이 없습니다.
2. 임의의 클래스의 일반적인 방법
랜덤 클래스의 방법은 비교적 간단하며 각 방법의 기능도 이해하기 쉽습니다. 랜덤 클래스에서 각 방법에 의해 생성 된 랜덤 숫자는 균일하게 분포되어 있으며, 이는 간격 내에서 수치 생성의 확률이 동일하다는 것을 의미합니다. 다음은 이러한 방법에 대한 기본 소개입니다.
에이. 공개 부울 Nextboolean ()
이 방법의 기능은 임의의 부울 값을 생성하는 것이며, 참와 거짓 값을 생성 할 확률은 동일합니다. 즉, 둘 다 50%입니다.
비. Public Double NextDouble ()
이 방법의 목적은 값을 [0, 1.0) 사이에서 임의의 이중 값을 생성하는 것입니다.
C, public int nextint ()
이 방법의 목적은 -231에서 231-1 사이의 임의의 int 값을 생성하는 것입니다.
지정된 간격에 대한 Int 값을 생성 해야하는 경우 특정 수학적 변환을 수행해야합니다. 자세한 내용은 아래 사용 예제의 코드를 참조하십시오.
D, Public Int NextInt (int n)
이 방법의 기능은 [0, n)의 간격, 즉 0과 n 사이의 랜덤 int 값, 즉 0을 포함하지만 n이 아닌 임의의 int 값을 생성하는 것입니다.
지정된 간격에 대해 Int 값을 생성하려면 특정 수학적 변환을 수행해야합니다. 자세한 내용은 아래 사용 예제의 코드를 참조하십시오.
e, 공공 공간 setseed (긴 씨앗)
이 방법의 목적은 임의의 물체에서 종자 수를 재설정하는 것입니다. 씨앗 수를 설정 한 후, 임의의 객체는 새 키워드로 생성 된 임의의 객체와 동일합니다.
3. 임의의 클래스 사용 예제
랜덤 클래스를 사용하면 일반적으로 지정된 간격에 대해 난수를 생성하는 것입니다. 다음은 해당 간격에 대해 임의의 숫자를 하나씩 생성하는 방법을 소개합니다. 임의 숫자를 생성하는 다음 코드는 다음 랜덤 객체 r을 사용하여 생성됩니다.
랜덤 r = 새로운 랜덤 ();
에이. 간격의 소수성 생성 [0, 1.0)
코드 사본은 다음과 같습니다.
이중 D1 = R.NextDouble ();
NextDouble 방법을 사용하여 직접 얻습니다.
비. 간격의 소수성 생성 [0,5.0)
코드 사본은 다음과 같습니다.
Double D2 = R.NextDouble () * 5;
NextDouble 방법에 의해 생성 된 숫자 간격은 [0, 1.0)이므로 간격을 5 배 늘리는 것이 필요한 간격입니다.
마찬가지로, 간격 [0, d)에서 임의의 소수점을 생성하고 d는 양수 소수점이므로 다음 double 메소드의 반환 값에 d를 곱하면됩니다.
기음. 간격으로 소수성 생성 [1,2.5)
코드 사본은 다음과 같습니다.
이중 D3 = R.NextDouble () * 1.5 + 1;
간격 [1, 2.5)의 임의 소수점을 생성하려면 먼저 [0, 1.5) 간격의 랜덤 숫자 만 생성 한 다음 생성 된 임의 번호 간격에 1을 추가하면됩니다.
마찬가지로, 0에서 시작하지 않는 10 진수 간격 [D1, D2)의 범위에서 임의의 숫자를 생성하려면 (D1이 0이 아닌 경우) 먼저 [0, D2-D1)의 난수를 생성 한 다음 생성 된 임의 숫자 간격을 D1에 추가하면됩니다.
디. 정수를 생성하십시오
코드 사본은 다음과 같습니다.
int n1 = r.nextint ();
NextInt 메소드를 직접 사용하십시오.
이자형. 간격으로 정수 생성 [0,10)
코드 사본은 다음과 같습니다.
int n2 = r.nextint (10);
n2 = math.abs (r.nextint () % 10);
위의 두 줄의 코드는 간격으로 정수를 생성 할 수 있습니다 [0,10).
첫 번째 구현은 랜덤 클래스에서 NextInt (int n) 메소드를 사용하여 직접 구현됩니다.
두 번째 구현에서 먼저 다음 호출 다음 int 번호를 생성하기 위해 다음 번에 다음으로 호출하십시오. 10의 숫자 합계에 의해 생성 된 간격은 (-10,10)이고, 간격의 절대 값을 찾아 획득 된 간격은 [0,10)입니다.
마찬가지로, 모든 간격으로 임의의 정수를 생성하려면 [0, n) 다음 코드를 사용할 수 있습니다.
코드 사본은 다음과 같습니다.
int n2 = r.nextint (n);
n2 = math.abs (r.nextint () % n);
에프. 간격으로 정수 생성 [0,10]
코드 사본은 다음과 같습니다.
int n3 = r.nextint (11);
n3 = math.abs (r.nextint () % 11);
정수 간격과 비교하여 [0,10] 간격 및 [0,11) 간격은 동일하므로 [0,11) 간격의 정수가 생성됩니다.
g. 간격으로 정수 생성 [-3,15)
코드 사본은 다음과 같습니다.
int n4 = r.nextint (18) -3;
n4 = math.abs (r.nextint () % 18) -3;
0부터 시작하지 않는 임의의 정수를 생성하려면 0부터 시작하지 않는 소수점 간격의 구현 원리에 대한 위의 설명을 참조 할 수 있습니다.
H, 달성 할 기회
특정 기회에 따라 프로그램 논리 구현도 무작위 처리로 해결할 수있는 문제입니다. 다음은 임의의 숫자를 사용하여 기회의 논리를 구현하는 방법을 보여주는 간단한 예입니다.
이전 방법 소개에서, NextInt (int n) 메소드에서 생성 된 숫자는 균일합니다. 즉, 간격 내에서 각 숫자의 생성 가능성은 동일합니다. 그런 다음 간격 [0,100)의 임의의 정수가 생성되면, 생성되는 각 숫자의 가능성은 동일해야하며, 간격에 100 개의 정수가 있으므로 각 숫자의 가능성은 1%입니다. 이 이론에 따르면, 프로그램의 확률 문제를 실현할 수 있습니다.
예 : 55% 확률로 1, 40% 확률로 2, 5% 확률로 3을 생성하는 정수를 무작위로 생성합니다. 구현 된 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
int n5 = r.nextint (100);
int m; // 결과 번호
if (n5 <55) {// 55 숫자 간격, 55% 확률
m = 1;
} else if (n5 <95) {// [55,95), 40 숫자 간격, 40% 확률
m = 2;
}또 다른{
m = 3;
}
각 수의 확률은 1%이므로 55 자리 간격의 확률은 55%입니다. 코드를 작성하는 편의를 위해 [0,55) 간격의 모든 정수가 여기에서 사용되며 후속 원칙은 동일합니다.
물론, 확률은 5%의 배수이기 때문에 여기의 코드를 단순화 할 수 있으므로 5%를 기준으로 기회를 제어하십시오. 다음은 단순화 된 코드 구현입니다.
코드 사본은 다음과 같습니다.
int n6 = r.nextint (20);
int m1;
if (n6 <11) {
M1 = 1;
} else if (n6 <19) {
M1 = 2;
}또 다른{
M1 = 3;
}
프로그램 내부에서는 위의 지침에 따라 확률의 논리를 구현할 수 있습니다.
4. 다른 문제
에이. 동일한 종자 번호를 가진 임의의 물체의 문제
앞에서 언급했듯이, 같은 수의 종자를 가진 임의의 물체는 동일한 숫자로 생성 된 동일한 임의의 숫자를 가지고 있습니다. 다음은 테스트 코드입니다.
코드 사본은 다음과 같습니다.
랜덤 R1 = 새로운 랜덤 (10);
랜덤 R2 = 새로운 랜덤 (10);
for (int i = 0; i <2; i ++) {
System.out.println (r1.nextint ());
System.out.println (r2.nextint ());
}
이 코드에서 객체 R1과 R2가 사용하는 씨앗의 수는 10이므로 동일한 횟수로 생성 된 랜덤 숫자는 정확히 동일합니다.
임의 숫자가 동일한 상황을 피하려면 프로젝트에서 생성해야 할 임의의 숫자 수에 관계없이 임의의 객체 만 사용할 수 있습니다.
비. 수학 클래스의 임의 메소드에 대해
실제로 수학 클래스에는 임의의 메소드도 있습니다. 이 임의의 방법의 작업은 간격의 임의 소수점을 생성하는 것입니다 [0, 1.0).
수학 클래스의 소스 코드를 읽으면 수학 클래스의 랜덤 메소드가 랜덤 클래스에서 NextDouble 메소드를 직접 호출하여 구현 될 수 있습니다.
임의의 방법을 비교적 단순하게 불리는 것이므로 많은 프로그래머가 수학 클래스의 임의 메소드를 사용하여 임의의 숫자를 생성하는 데 익숙합니다.