저는 최근에 모바일 애플리케이션 프로그래밍에 대해 배우기 시작했습니다. 나는 기본적인 프로그램을 작성하면서 약간의 연습을하고 있었다. 우선 LibGDX를 사용하고 있으므로 먼저 데스크톱에서 응용 프로그램을 테스트 한 다음 Android에서 테스트합니다.
내 프로그램 어딘가에 0, 1, 2에서 3 개의 임의의 숫자를 생성해야합니다 (임의 인 한 동일한 숫자 일 수 있음). 데스크탑에서 내 프로그램은 잘 작동하며 실행할 때마다 3 개의 난수를 생성합니다. 그러나 내 안드로이드 폰에서 시도하면 세 번호가 모두 동일합니다. 예 : 3 개의 평가판 : 내 데스크톱 : 0-0-1, 2-1-2, 2-0-1 내 전화; 0-0-0, 2-2-2, 0-0-0;
for (int x = 0; x < 3; x++){
Random randomGenerator = new Random();
int randomNumber = randomGenerator.nextInt(3);
postNumber(randomNumber);//This function I wrote sends the randomNumber to be drawn on the screen
}
루프 외부에서 또는 이상적으로는 한 번만 Random()
인스턴스를 초기화해야합니다 . ( 문서 에는 스레드로부터 안전하다고 명시되어 있으므로 스레드 당 하나씩 필요하지 않아야합니다.)
기본적으로 Random
현재 시간 을 기준으로의 새 인스턴스를 시드 하고 있으며 현재 시간은 루프 반복 사이에 크게 변경되지 않습니다. 이것은 일반적인 오류이며 Oracle Java 구현은 얼마 전에 수정했습니다. Android 구현은 아직 그렇지 않은 것 같습니다. 그러나 근본적으로 그것은 당신 자신의 문제이며 Random
모든 숫자를 생성하기 위해 단일 인스턴스를 사용함으로써 확실히 피할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다