우리는 책에서 무엇을 배우나요?
가장 명백하고 직관적 인 방법은 간단한 전화로 Java에서 임의의 숫자를 생성하는 것입니다.
java.lang.math.random ()
다른 모든 언어에서 임의 숫자를 생성하는 것은 ABS, Pow, Floor, SQRT 및 기타 수학적 기능과 같은 수학 도구 클래스를 사용하는 것과 같습니다. 대부분의 사람들은 책, 튜토리얼 및 코스를 통해이 범주에 대해 배웁니다. 간단한 예 : 이중 정밀 부동물 지점 번호는 0.0에서 1.0으로 생성 될 수 있습니다. 그런 다음 위의 정보를 통해 개발자는 0.0에서 10.0 사이의 이중 정제 플로팅 포인트 번호를 생성하고 다음과 같이 작성하려고합니다.
Math.random () * 10
0과 10 사이의 정수가 생성되면 다음과 같이 작성됩니다.
Math.round (Math.random () * 10)
고급의
Math.random ()의 소스 코드를 읽거나 단순히 IDE의 자동 완료 함수를 사용하여 개발자는 java.lang.math.random ()를 쉽게 찾을 수 있습니다. 생성 : 부울 값, 모든 숫자 유형 및 가우스 분포까지. 예를 들어:
new java.util.random (). NextInt (10)
단점이 있습니다. 즉, 대상입니다. 메소드는 인스턴스를 통해 호출되어야하므로 생성자를 먼저 호출해야합니다. 충분한 메모리가 있으면 위의 표현이 허용되지만 메모리가 충분하지 않으면 문제가 발생합니다.
임의의 숫자가 정적 클래스를 사용하는 것입니다. Java.lang.math를 생각했을 수도 있습니다. 아주 잘, 우리는 Java.lang.math의 초기화를 개선하고 있습니다. 이 프로젝트는 낮지 만 잘못되지 않도록 간단한 단위 테스트를 수행해야합니다.
프로그램이 저장할 임의의 숫자를 생성해야한다고 가정하면 문제가 다시 발생합니다. 예를 들어, 때때로 종자를 작동 시키거나 보호해야하며 내부 번호는 상태를 저장하고 다음 임의 숫자를 계산하는 데 사용됩니다. 이 특별한 경우 무작위로 생성 된 객체를 공유하는 것은 부적절합니다.
경쟁 상대
Java EE Multithreaded Application의 환경에서 무작위로 생성 된 인스턴스 객체는 여전히 클래스 또는 기타 구현 클래스에 정적 속성으로 저장 될 수 있습니다. 다행스럽게도 Java.util.random은 실로 안전하므로 여러 개의 스레드 호출이 종자를 파괴 할 위험이 없습니다.
고려해야 할 또 다른 것은 java.lang.threadlocal의 멀티 스레드 인스턴스입니다. 게으른 접근 방식은 Java 자체를 통해 단일 인스턴스를 구현하는 것입니다.
Java는 java.util.random의 단일 인스턴스를 관리하는 좋은 방법을 제공하지는 않습니다. 그러나 대망의 Java 7은 임의의 숫자를 생성하는 새로운 방법을 제공합니다.
java.util.concurrent.threadlocalrandom.current (). NextInt (10)
이 새로운 API는 단일 인스턴스/정적 액세스, math.random ()과 같은 두 가지 다른 접근법의 장점을 결합합니다. ThreadLocalrandom은 높은 동시성을 처리하는 다른 방법보다 빠릅니다.
경험
Chris Marasti-Georg는 다음과 같이 지적합니다.
Math.round (Math.random () * 10)
예 : 0.0-0.499999는 0으로, 0.5 ~ 1.4999999는 1로 반올림됩니다. 따라서 구식 구문을 사용하여 올바른 균형 잡힌 분포를 달성하는 방법 :
Math.floor (Math.random () * 11)
다행히도 java.util.random 또는 java.util.concurrent.threadlocalrandom을 사용하면 위의 내용에 대해 걱정할 필요가 없습니다.
Java 실제 프로젝트는 java.util.random API를 사용하여 잘못 사용하는 일부 피해를 소개합니다. 이 레슨은 사용하지 말라고합니다.
math.abs (rnd.nextint ())%n
그리고 사용 :
rnd.nextint (n)
위의 y는 Java의 N 랜덤 숫자에 대한 관련 소개이며, 모든 사람의 학습에 도움이되기를 바랍니다.