我有以下功能:
//Function to get random number
public static int RandomNumber(int min, int max)
{
Random random = new Random();
return random.Next(min, max);
}
Run Code Online (Sandbox Code Playgroud)
我怎么称呼它:
byte[] mac = new byte[6];
for (int x = 0; x < 6; ++x)
mac[x] = (byte)(Misc.RandomNumber((int)0xFFFF, (int)0xFFFFFF) % 256);
Run Code Online (Sandbox Code Playgroud)
如果我在运行时使用调试器执行该循环,则会得到不同的值(这就是我想要的).但是,如果我在该代码下面放置一个断点两行,则"mac"数组的所有成员都具有相同的值.
为什么会这样?
我最近在另一篇文章的评论中讨论了相同类型的多个随机数生成器的初始化,在讨论中我们询问了以下问题:
1)使用不同的种子创建相同随机数生成器的多个实例并在程序的不同部分使用这些随机数生成器是一个好主意吗?
2)特别是,使用.Net Random类创建随机数生成器的技术,如下所示,并在不同的程序上下文中使用每个RNG会导致问题:
int size = 64; // The number of RNGs to use
int seed; // Get seed using some normal technique
Random[] r = new Random[size];
for (int i = 0; i < size; i++)
{
r[i] = new Random(seed + i);
}
Run Code Online (Sandbox Code Playgroud)
3)如果需要多个随机数流,你会建议什么?
4)当需要线程安全时,您如何建议生成随机数?
例如,如果我有一个班级:
public class Class
{
public Random r;
public Class()
{r= new Random()}
}
Run Code Online (Sandbox Code Playgroud)
然后创建它的两个实例:
Class a = new Class();
Class b = new Class();
Run Code Online (Sandbox Code Playgroud)
并且按顺序调用r,两者的r将给出相同的值.我读过这是因为Random的默认构造函数使用时间来提供"随机性",所以我想知道如何防止这种情况.提前致谢!
我有一个名为"GetValue()"的方法,它应该在每次方法调用时返回值"A","B","C"或"D".
我希望这个方法在30%的方法调用中返回值"A",在14%的方法调用中返回值"B",值"C"31%..依此类推......
这是顺利分配theese值的最佳方式,我不希望该方法连续返回值"A"xxx次,因为值"A"是它所请求的结果百分比最重要的.
请各位回复者表示赞赏.
在我的.NET游戏中,我的rand函数确定玩家五个角色应该承受多少伤害,但是第一个似乎总是在比例的底部,最后一个在顶部.所以在我Character[0]的伤害中,伤害很少超过最小兰特值的1倍以上,并且对于每个Character更高的指数,所造成的伤害只是从比例越高的位置随机化.
public int GetDamage(int low, int high)
{
Random r = new Random();
int rand = r.Next(low, high);
return rand;
}
Run Code Online (Sandbox Code Playgroud)
这是我使用的随机数.然后我像这样更新健康状况:
int Damage = GetDamage(3, 10);
Characters[Target].Health = Characters[Target].Health - Damage;
Run Code Online (Sandbox Code Playgroud)
在这个例子中,dmg分为这样:
Number 1: 3-4
Number 2: 4-6
Number 3: 5-7
Number 4: 7-8
Number 5: 8-9
Run Code Online (Sandbox Code Playgroud) 我需要在 C# 中生成随机整数。我正在使用时钟时间来设置种子。但是,由于 rnd.Next() 函数可能需要不到一毫秒,因此如果必须生成整数列表,这将不起作用。
for( int i=0; i<5; i++) {
int max_val = 10; // max value
var rnd = new Random(DateTime.Now.Millisecond);
int randind = rnd.Next(0, max_val);
Console.WriteLine(randind);
}
Run Code Online (Sandbox Code Playgroud)
输出:
1 5 5 5 5
如何在不增加丑陋睡眠的情况下以干净的方式随机化种子?