Java의 java.util.Random 클래스는 무엇입니까?
java.util.Random 클래스는 의사 난수를 생성하는 데 사용됩니다 . 이 클래스에 의해 구현된 메서드는 int, double 및 float와 같은 다양한 임의 데이터 유형을 생성하는 데 사용됩니다. 따라서 난수에는 두 가지 주요 유형인 통계적 난수 와 의사 난수 가 있습니다 . 통계적 난수(수학의 단순 난수와 유사)는 인식할 수 있는 패턴이 없는 값의 집합입니다. 예를 들어 주사위를 10번 굴리면 인식할 수 있는 패턴이 없는 임의의 숫자가 매번 생성됩니다.의사 난수란 무엇입니까?
이것은 통계적으로 임의적이지만 알려진 시작점이 있는 값의 집합입니다 . Java에서 각 의사 난수는 알고리즘을 통해 생성됩니다. 따라서 일반적으로 java.util.Random이 난수를 생성할 때마다 주기가 반복됩니다 . Java의 난수 생성기는 통계적으로 난수를 생성하지만 알려진 시작점을 사용하여 알고리즘에 의해 생성됩니다. 그것은 그 값을 의사 난수로 만듭니다.java.util.Random 클래스는 암호학적으로 안전하지 않습니까?
난수 생성을 위해 구현된 알고리즘이 있기 때문에 암호학적으로 안전하지 않습니다. 결과적으로 알고리즘 작동 방식을 아는 사람은 민감한 데이터에 액세스하는 데 많은 시간이 걸리지 않습니다. 따라서 일부 보안 응용 프로그램으로 작업하거나 일부 민감한 데이터를 보호해야 하거나 임의 암호를 생성해야 하는 경우 이 클래스를 사용하지 않는 것이 좋습니다. 루도, 도박, 경기를 위한 던지기 또는 원하는 결과를 예측할 수 없는 기타 영역에서 주사위 굴림에 대한 난수 생성과 같은 많은 경우에 유용합니다.방법 선언
이 클래스의 메서드를 사용하려면 먼저 패키지에서 다음과 같이 가져와야 합니다.
import java.util.Random;
가져온 후 다음과 같이 이 클래스의 개체를 만들어야 합니다.
Random randomNumbers = new Random();
더 나아가 java.util.Random 클래스를 사용하는 다양한 예를 살펴보겠습니다 .
예
import java.util.Random;
public class RandomClassExample1 {
public static void main(String[] args) {
// create random object
Random randomNumbers = new Random();
System.out.println("----------Random Boolean---------" );
/*
* Returns the next pseudo random boolean value which
* may be used in a toss for a match
*/
boolean value = randomNumbers.nextBoolean();
System.out.println("The random boolean value is: " + value);
/*
* Returns the next pseudo random integer value between 0 and 5
* because if we use '6' then, it will give random numbers from 0 to 6
* hence incrementing it by 1 you can use it as a result of a dice roll
*/
System.out.println("\n----------Random Integer---------" );
System.out.println("Die Roll: " + (randomNumbers.nextInt(6)+1) );
System.out.println("Die Roll: " + (randomNumbers.nextInt(6)+1) );
System.out.println("Die Roll: " + (randomNumbers.nextInt(6)+1) );
System.out.println("Die Roll: " + (randomNumbers.nextInt(6)+1) );
System.out.println("Die Roll: " + (randomNumbers.nextInt(6)+1) );
// return the next pseudo random long value
Long val = randomNumbers.nextLong();
System.out.println("\n----------Random Long---------" );
System.out.println("Random Long value: " + val);
/*
* Generates random bytes and puts them in an array, which you can for some
* desired unpredictable result that is summing all the values in the array
*/
System.out.println("\n----------Random Bytes---------" );
byte[] bytes = new byte[8];
randomNumbers.nextBytes(bytes);
System.out.print("These are the random bytes = [ ");
for (int i = 0; i < bytes.length; i++) {
System.out.printf("%d ", bytes[i]);
}
System.out.println("]");
}
}
산출
----------Random Boolean--------- Random Boolean 값: true ----------Random Integer--------- Die 롤: 4 다이 롤: 6 다이 롤: 1 다이 롤: 1 다이 롤: 3 ----------Random Long--------- Random Long 값: -6029959293504570824 ---- ------랜덤 바이트--------- 랜덤 바이트 = [ -37 90 -98 -70 23 -111 19 108 ]
행동 양식
이제 randomNumbers가 클래스의 개체 또는 인스턴스라는 점을 염두에 두고 이 클래스에서 제공하는 몇 가지 메서드에 대해 설명하겠습니다 .-
복식() :
이 메서드는 의사 난수로 생성된 double 값의 무한한 시리즈를 반환합니다. 이제 이 방법을 사용하는 방법을 살펴보겠습니다.
randomNumbers.doubles();
-
정수() :
이 메서드는 의사 난수로 생성된 정수 값의 무한한 계열을 반환합니다. 다음 스크립트를 사용하여 이 메서드를 호출할 수 있습니다.
randomNumbers.ints();
-
롱() :
이 메서드는 임의로 생성된 긴 값의 무한한 계열을 반환합니다. 다음 스크립트는 이 메서드를 호출하는 데 사용됩니다.
randomNumbers.longs();
-
다음 부울() :
이 메서드는 난수 생성기 시퀀스에서 균일하게 분포된 다음 의사 난수 부울 값을 반환합니다. 균일 분포는 직사각형 모양이며 분포의 모든 값이 동일한 확률을 가짐을 의미합니다. 이 방법을 사용하는 방법은 다음과 같습니다.
randomNumbers.nextBoolean();
-
nextInt(int n) :
이 메서드는 0 포함 및 제공된 값 제외 사이의 난수 생성기 시퀀스에서 균일하게 분포된 다음 의사 난수 정수 값을 반환합니다. 이 방법을 사용하는 방법을 빠르게 살펴보십시오.
randomNumbers.nextInt(10);
GO TO FULL VERSION