如何在控制台上连续打印一些随机数?



我的问题是,当我试图使用Unity在随机位置生成一些对象时,由于某些未知的原因,这些生成对象的位置是相同的位置。

我尝试在我的代码中添加Thread.Sleep(),位置将被随机化。

下面是一个例子:

class Program
{
static void Main(string[] args)
{
var mytest = new Program();
Console.WriteLine(mytest.test());
Thread.Sleep(500);
Console.WriteLine(mytest.test());
Thread.Sleep(500);
Console.WriteLine(mytest.test());
Thread.Sleep(500);
}
public int test()
{
Random random = new Random();
int testrandom = random.Next(5, 100);
return testrandom;
}
}

我不想一直使用Thread.Sleep(),有办法解决这个问题吗?

在使用调试时,我发现不使用Thread.Sleep(),局部变量testrandom将被随机更新为testrandom= 30,testrandom=32,testrandom=13…,但结果是不同的,结果是testrandom=30,重复3次。有人能告诉我为什么会这样吗?也许它跑得太快了?

。随机类是由系统时钟播种的,如果没有显式的种子,所以如果你在短时间内创建新的实例,每个实例将给你相同的数字。这也是为什么在mytest.test()调用之间添加睡眠可以缓解问题的原因,因为系统时钟在Thread.Sleep结束时已经提前了。您应该重用相同的Random实例,并且每次都使用该实例:

class Program
{
private Random random = new Random();
static void Main(string[] args)
{
var mytest = new Program();
Console.WriteLine(mytest.test());
Console.WriteLine(mytest.test());
Console.WriteLine(mytest.test());
}
public int test()
{
int testrandom = random.Next(5, 100);
return testrandom;
}
}

同样,你可以声明你的test()方法和随机实例为静态的,所以你不需要创建程序类的实例:

class Program
{
private static Random random = new Random();
static void Main(string[] args)
{
Console.WriteLine(test());
Console.WriteLine(test());
Console.WriteLine(test());
}
public static int test()
{
int testrandom = random.Next(5, 100);
return testrandom;
}
}

最新更新