1 回答

TA贡献1827条经验 获得超4个赞
您很可能每次都使用一个新实例。不应以可重复方式实例化。Randomnew Random(seed_here)
Random r = new Random(); //Do this once - keep it as a (static if needed) class field
for (int i = 0; i < 10; i++) {
Console.WriteLine($"{r.Next()}");
}
更新
下面是一个更复杂的示例:
class MyClass
{
//You should use a better seed, 1234 is here just for the example
Random r1 = new Random(1234); // You may even make it `static readonly`
public void BadMethod()
{
// new Random everytime we call the method = bad (in most cases)
Random r2 = new Random(1234);
for (int i = 0; i < 3; i++)
{
Console.WriteLine($"{i + 1}. {r2.Next()}");
}
}
public void GoodMethod()
{
for (int i = 0; i < 3; i++)
{
Console.WriteLine($"{i+1}. {r1.Next()}");
}
}
}
class Program
{
static void Main(string[] args)
{
var m = new MyClass();
m.BadMethod();
m.BadMethod();
m.GoodMethod();
m.GoodMethod();
}
}
输出
1. 857019877
2. 1923929452
3. 685483091
1. 857019877 <--- Repeats
2. 1923929452
3. 685483091
1. 857019877
2. 1923929452
3. 685483091
1. 2033103372 <--- Phew! It's a new number
2. 728933312
3. 2037485757
- 1 回答
- 0 关注
- 85 浏览
添加回答
举报