控制台在开始时打印相同的值,但不是逐步打印

问题描述 投票:0回答:2

我希望我能清楚地解决问题,感谢你的时间。

在我的控制台程序中,它每行打印2个变量双随机和一个String,我重复随机逻辑并再次重新打印,我创建3张卡,但在“Card card2 = new Card”之前,这保存了Atkk,Def, Tipe,在一个字符串中,引用这些值所属的Card,以及Main中的3个打印。但是当使用开始按钮运行它时,它总是打印如下:

Atakk:2.33 , Def: 4.66, Tipe: Fire
Atakk:2.33 , Def: 4.66, Tipe: Fire
Atakk:2.33 , Def: 4.66, Tipe: Fire

是的,当我关闭它并再次尝试时它总是一样的,显然值会改变,但同样的事情重复3次......

然后我一步一步地运行了4次(F11),结果总是变化很大:

Atakk:1.33 , Def: 5.10, Tipe: Fire
Atakk:4.64 , Def: 8.69, Tipe: Water
Atakk:0.17 , Def: 9.20, Tipe: Land

有人遇到同样的问题,因为这样的事情是这样的吗?

c# console logic instance
2个回答
0
投票

这是一个猜测,但我怀疑这与你初始化你的new Random()的方式有关。

它应该做一次,而不是循环。

如 蝙蝠侠 @John说请查看Random number generator only generating one random number


0
投票

因为随机分类是基于时钟初始化的,所以有时你会遇到相同的数字。解决方案是你应该保留相同的Random实例并在同一个Random实例上调用Next()来生成你的数字:

    private static readonly Random Random = new Random();
    private static readonly object SyncLock = new object();

    public static int GenerateRandomNumber(int min, int max)
    {
        lock (SyncLock)
        {
            return Random.Next(min, max);
        }
    }

P / S:这只是一个例子。在源代码中,您可以定义单个类或其他东西以获得更好的设计。

快乐的编码!

© www.soinside.com 2019 - 2024. All rights reserved.