앞에 텍스트가있는 난수를 만들고 시스템에 숫자가 두 번 표시되는 것을 원하지 않습니다. 그래서, 이것이 제가 한 방식입니다.
Random _rand = new Random();
private void RandomNumberGenerator()
{
int random = _rand.Next(10000);
string text = "TP0" + random;
if (random.Equals(random))
{
_rand.Next();
}
else
{
random = _rand.Next(10000);
}
MessageBox.Show(text);
}
표시된 숫자가 두 번 표시되지 않습니다 (하지만 숫자가 5 번 표시 될 때까지 프로그램을 닫았 기 때문에 확실하지 않습니다 (모두 동일한 숫자가 아님)).
위의 코드에서 혹시 숫자를 두 번 표시하는 것이 가능합니까?
감사합니다.
매직 넘버를 제거하고 온전함을 보장하기 위해 편집되었습니다.
Random _rand = new Random();
HashSet<int> _taken = new HashSet<int>();
object _syncRoot = new object();
private int RandomNumberGenerator() {
lock (_syncRoot) {
const int MAX_NUMBER = 10000;
if (_taken.Count == MAX_NUMBER) {
throw new Exception("All possible numbers are already generated.");
}
int random = _rand.Next(MAX_NUMBER);
while (_taken.Contains(random)) {
random = (random + 1) % MAX_NUMBER;
}
_taken.Add(random);
return random;
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다