我想要生成25个独特的随机数字,并在控制台中列出它们。这些数字应至少具有10个字符长度。有什么简单的方法可以实现吗?
Random random = new Random();
HashSet<string> ids = new HashSet<string>();
while (ids.Count < 25)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; ++i)
{
sb.Append(random.Next(10));
}
ids.Add(sb.ToString());
}
输出示例:
7895499338 2643703497 0126762624 8623017810 ...等等...
HashSet 类 存在于 .NET 3.5 及更高版本。
Random r = new Random();
for(int i=0; i<25; i++)
Console.WriteLine(r.Next(1,100).ToString());
这些数字不一定是唯一的。如果您不想允许重复,需要以某种方式存储先前生成的数字,如果遇到旧数字则重新生成。
请注意,这样会改变您生成数字的概率分布。
编辑:我刚刚注意到这些数字应该是十个字符长。由于 9,999,999,999 超过了 Int32.MaxValue,建议使用 Math.Floor(r.NextDouble() * 10000000000 + 1000000000)
而不是 r.Next(1,100)
。
由于您的数字如此之长,您不需要担心重复。它们非常非常不可能出现重复。
r.Next()
返回的是一个double而不是int,所以我使用了它。 - Jensr.Next()
返回一个整数。你需要使用 r.NextDouble()
,即使这样你也在过度复杂化事情。 - IVlad随机性和唯一性之间存在很大的区别。
因此,如果您需要真正的唯一数字,您必须确保在某个地方保存所有已创建的数字,并检查您新创建的数字是否不在该列表中,或者您必须提供某种算法,确保给定的数字不能被重复创建。
为了使第二部分起作用,您通常要获取创建时刻的日期/时间,因为当前的日期/时间对永远是唯一的。唯一的问题是每(毫)秒有多少次创建以及有多少位可用于存储您的唯一数字。
这里提供一个使用12位数字的示例(在此处制作)。希望这可以帮助到您。
一个简单的方法是这样的:
class Test
{
private static void Main()
{
Random rand = new Random();
for (int i = 0; i < 25; ++i)
{
Console.WriteLine(rand.Next(1000000000, int.MaxValue));
}
}
}
这将确保数字始终为10个字符(数字)长。但它们不一定是唯一的。如果您希望它们绝对是唯一的,您需要做类似于以下操作:
class Test
{
private static void Main()
{
Random rand = new Random();
var generatedSoFar = new HashSet<int>();
for (int i = 0; i < 25; ++i)
{
int newRand;
do
{
newRand = rand.Next(1000000000, int.MaxValue);
} while (generatedSoFar.Contains(newRand)); // generate a new random number until we get to one we haven't generated before
generatedSoFar.Add(newRand);
Console.WriteLine(newRand);
}
}
}
如果你想要超过十个数字,你可以在10和最大数字之间随机生成数字的位数。然后在StringBuilder或List中随机生成每个数字(或数字组)。你可以使用我上面使用的HashSet方法来确保唯一性。
Random rnd = new Random(table);
for(int i = 0; i < 25; ++i) {
Console.WriteLine("{0}", rnd.Next(50, 50+i)
}