現実的なキー押下イベントをシミュレートしようとしています。そのため、SendInput() メソッドを使用していますが、より大きな結果を得るには、keyDOWN イベントと KeyUP イベントの間の遅延を指定する必要があります。以下の数値は、DOWN イベントと UP イベントの間の経過時間をミリ秒単位で示しています (これらは実際/有効です)。
96 95 112 111 119 104 143 96 95 104 120 112 111 88 104 119 111 103 95 104 95 127 112 143 144 143 128 144 112 111 111 111 111 111 111 111 111 111 111 111 111 111 111 135 118 147 96 135 103 64 64 64 87 112 88 111 111 112 111 104 87 95
出力を簡略化できます。
遅延 64 ~ 88 ミリ秒 -> 時間の 20%
遅延 89 ~ 135 ミリ秒 -> 時間の 60%
遅延 136 - 150 ミリ秒 -> 時間の 20 %
上記の確率に従ってイベントをトリガーするにはどうすればよいですか? ここに私が今使っているコードがあります:
private void button2_Click(object sender, EventArgs e)
{
textBox2.Focus();
Random r = new Random();
int rez = r.Next(0, 5); // 0,1,2,3,4 - five numbers total
if (rez == 0) // if 20% (1/5)
{
Random r2 = new Random();
textBox2.AppendText(" " + rez + " " + r2.Next(64, 88) + Environment.NewLine);
// do stuff
}
else if (rez == 4)//if 20% (1/5)
{
Random r3 = new Random();
textBox2.AppendText(" " + rez + " " + r3.Next(89, 135) + Environment.NewLine);
// do stuff
}
else // if 1 or 2 or 3 (3/5) -> 60%
{
Random r4 = new Random();
textBox2.AppendText(" " + rez + " " + r4.Next(136, 150) + Environment.NewLine);
// do stuff
}
}
このコードには大きな問題があります。理論的には、数百万回の反復の後、結果のグラフは次のようになります。
この問題に対処するには?
編集:解決策は、人々が提案したように配布を使用することでした。
そのようなコードのJava実装は次のとおりです。
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html#nextGaussian%28%29
C# の実装は次のとおりです。
「偏差」の値を少し減らすことをお勧めしますが。
ここに興味深いmsdnの記事があります
http://blogs.msdn.com/b/ericlippert/archive/2012/02/21/generating-random-non-uniform-data-in-c.aspx
みんな助けてくれてありがとう!