Random.Next는 항상 동일한 값을 반환합니다.
이 질문에 이미 답변이 있습니다.
- 난수 생성기는 하나의 난수 만 생성 9 답변
이것은 정말 이상하고 왜 이런 일이 일어나는지 알 수 없습니다. foreach주기에서는 클래스 A 컬렉션을 반복하고 각 클래스에 대해 Count()
메서드를 호출합니다 . 여기서 r1
및 r2
숫자는 [-1,1] 범위에서 생성됩니다. 문제는 Random.Next
각 인스턴스에 대해 동일한 "무작위"숫자를 반환 한다는 것 입니다. 첫 번째 인스턴스의 결과가 0과 -1이면 다음 인스턴스에서 동일한 결과가 반환됩니다. 왜 이런 일이 일어나는지 말씀해 주시겠습니까? 또한 각 클래스 A 인스턴스에서 다른 결과를 얻을 수 없습니다. 다음은 코드입니다.
class a
{
Random rnd = new Random();
private void Count()
{
int r1 = rnd.Next(-1, 1);
int r2 = rnd.Next(-1, 1);
}
}
class b
{
List<a> listofA=new list<a>();
foreach (a ACLASS in listofA)
{
ACLASS.Count();
}
}
문제는 Random
너무 가까운 시간에 클래스의 인스턴스를 만들고 있다는 것 입니다.
Random
개체 를 만들면 시스템 시계의 값으로 시드됩니다. Random
너무 가까운 시간에 인스턴스 를 만들면 모두 동일한 무작위 시퀀스로 시드됩니다.
각 "a"인스턴스에 대해 Random
하나의 Random
객체를 만드는 대신 "a"클래스의 인스턴스를 만들 때 단일 객체를 만들고 생성자에 대한 참조를 전달 합니다.
Random
매우 가까운 새 인스턴스를 만들고 (루프가 매우 빡빡함) 각 인스턴스가 동일한 시드 값을 효과적으로 사용합니다.
더 나은 접근 방식은 하나의 인스턴스를 만들고이를 Count
메서드에 전달하는 것입니다.
당신은 아마이 다음 부분을 알고있을 것입니다. 그러나 여기에 완전성을 위해 포함시킬 것입니다.
MSDN은 이에 대한 세부 사항을 가지고 있지만, 기본적으로 문제가있다 Random.Next의 당신이 생성 사용하는 방법은 :
minValue보다 크거나 같고 maxValue보다 작은 32 비트 부호있는 정수. 즉, 반환 값 범위에는 minValue가 포함되지만 maxValue는 포함되지 않습니다. minValue가 maxValue와 같으면 minValue가 반환됩니다.
이 때문에 호출은 -1 또는 0을 반환합니다.
클래스의 모든 인스턴스에 단일 정적 난수 생성기를 사용합니다.
class a
{
private static Random rnd;
static a() {
rnd = new Random();
}
private void Count()
{
int r1 = rnd.Next(-1, 2);
int r2 = rnd.Next(-1, 2);
}
}
-1,0이 아닌 -1,1 범위의 숫자를 제공하는 변경 사항에 유의하십시오.
You include a random instance for each A instance. It sounds like they're all getting the same default seed value. You probably want to make a static random for all A instances and use it repeatedly, or alternatively provide a seed value to the Random() instance in the A constructor.
참고URL : https://stackoverflow.com/questions/1654887/random-next-returns-always-the-same-values
'program tip' 카테고리의 다른 글
SQL Server : 테이블 메타 데이터 추출 (설명, 필드 및 해당 데이터 유형) (0) | 2020.12.07 |
---|---|
런타임으로 결정된 유형으로 개체 인스턴스화 (0) | 2020.12.07 |
C #에서 SHA1 파일 체크섬을 어떻게 수행합니까? (0) | 2020.12.07 |
git : 시간대 및 타임 스탬프 형식 (0) | 2020.12.07 |
쿠키와 세션은 무엇이며 서로 어떤 관련이 있습니까? (0) | 2020.12.07 |