在C#中,為了避免生成的隨機(jī)數(shù)重復(fù),可以使用以下方法:
System.Random
類,并確保每次創(chuàng)建一個(gè)新的實(shí)例。這樣可以確保每次運(yùn)行程序時(shí)都會得到不同的隨機(jī)數(shù)序列。但是,在同一程序運(yùn)行期間,如果多次創(chuàng)建Random
實(shí)例,可能會因?yàn)榉N子值相同而導(dǎo)致生成相同的隨機(jī)數(shù)。Random random = new Random();
int randomNumber = random.Next();
System.Security.Cryptography.RNGCryptoServiceProvider
類來生成加密安全的隨機(jī)數(shù)。這種方法生成的隨機(jī)數(shù)比System.Random
更加隨機(jī),適用于需要高度隨機(jī)性的場景,如密碼生成等。using System.Security.Cryptography;
byte[] randomBytes = new byte[4]; // 生成一個(gè)4字節(jié)的隨機(jī)數(shù)
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(randomBytes);
int randomNumber = BitConverter.ToInt32(randomBytes, 0);
System.Collections.Generic.HashSet<T>
來存儲已經(jīng)生成過的隨機(jī)數(shù),并在生成新的隨機(jī)數(shù)時(shí)檢查它是否已經(jīng)存在于集合中。如果存在,則重新生成。HashSet<int> generatedNumbers = new HashSet<int>();
Random random = new Random();
for (int i = 0; i < 10; i++)
{
int randomNumber;
do
{
randomNumber = random.Next(1, 100); // 生成1到99之間的隨機(jī)數(shù)
} while (generatedNumbers.Contains(randomNumber));
generatedNumbers.Add(randomNumber);
Console.WriteLine(randomNumber);
}
請注意,當(dāng)隨機(jī)數(shù)范圍較小且需要生成的數(shù)量較多時(shí),這種方法可能會導(dǎo)致性能下降,因?yàn)榭赡苄枰啻螄L試才能找到一個(gè)不重復(fù)的隨機(jī)數(shù)。在這種情況下,可以考慮使用其他方法,如預(yù)先生成一個(gè)隨機(jī)數(shù)序列并將其存儲在列表或數(shù)組中,然后在需要時(shí)按順序取出。