我用他的JavaScript代码帮助了一个人,我的眼睛被一个看起来像这样的部分抓住了:
function randOrd(){
return (Math.round(Math.random())-0.5);
}
coords.sort(randOrd);
alert(coords);
Run Code Online (Sandbox Code Playgroud)
我的第一个是:嘿,这不可能奏效!但后来我做了一些实验,发现它确实至少似乎提供了很好的随机结果.
然后我做了一些网络搜索,几乎在顶部发现了一篇文章,这段代码最简单地被复制.看起来像一个相当可敬的网站和作者......
但我的直觉告诉我,这一定是错的.特别是因为ECMA标准没有规定排序算法.我认为不同的排序算法会导致不同的非均匀混洗.一些排序算法甚至可能无限循环...
但你怎么看?
而另一个问题是......现在我将如何衡量这种改组技术的结果是多么随机?
更新:我做了一些测量并将结果发布在下面作为答案之一.
今天,我在.NET Core中进行了一些测试,并且遇到了一些有趣的事情。
以前(〜.NET Framework 4)Random使用过Environment.TickCount,但现在我相信情况已经改变。
考虑以下代码:
while (true)
{
Random random = new Random();
Console.WriteLine(random.Next(0, 10000));
}
Run Code Online (Sandbox Code Playgroud)
在较早的.NET Framework版本中,new Random()空构造函数将使用Environment.TickCount,这将导致伪随机值的重复。
因此,您可以期待如下结果:
542
4211
5244
5244
5244
9501
9501
Run Code Online (Sandbox Code Playgroud)
以此类推。
在使用最新编译器的最新.NET Core版本上,我收到以下结果:
5332
220
3928
524
2973
2840
4965
5667
657
6434
3170
3046
7044
Run Code Online (Sandbox Code Playgroud)
绝对可以改善。
在旧版本中,其他表现出此问题的SO问题:
我的设置:.NET Core 2.2 /最新的C#编译器。
实际问题
所以我的问题是,PRNG是否真的得到了改善,或者他们只是将构造函数更改为使用其他默认种子,如果是,则它们用作种子是什么?密码术现在是否更安全(如果他们实际上改变了实现)?
我正在创建一个宾果游戏,我正在使用数组Random生成随机数,int但我的问题是有时在索引中再次使用一个数字.如何使索引中的数字唯一?
这是我的工作:
namespace Bingo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Random randNum1 = new Random();
int[] random1 = new int[5];
int qwe = 0;
int i = 0;
private void button1_Click(object sender, EventArgs e)
{
Class1 class1 = new Class1();
class1.checker(this);
if (label1.Text == label2.Text || label3.Text == label4.Text) {
label2.Text = randNum1.Next(1, 15).ToString();
label4.Text = randNum1.Next(1, 15).ToString();
}
if (label5.Text == label1.Text || label5.Text == label2.Text) {
label5.Text …Run Code Online (Sandbox Code Playgroud)