2

したがって、基本的には、フォームを強調するために、高い数値と低い数値の間の 2 つのランダムな整数を生成することになっているこの関数があります。ランダムがこれを処理できることは知っていますが、ランダムには一貫性がありますが、フォーム上で数値を完全にランダムにする必要があります。

たとえば、生成されたポイントのほとんどは対角線で表示されます。これは私が避けたいことです。それは高い数字と低い数字の間のフォーム全体に行き渡るはずです。

これが私の現在の機能です:

Function GetNewLocation() As Point
    Randomize()
    Dim int1 As Integer = RandomNumber(6, 345)
    Randomize()
    Dim int2 As Integer = RandomNumber(35, 286)
    Return New Point(int1, int2)
End Function

Function RandomNumber(ByVal low As Integer, ByVal high As Integer) As Integer
    Randomize()
    Return New Random().Next(low, high)
End Function

ポイントが対角線上にない真の乱数生成を取得するにはどうすればよいですか?

4

5 に答える 5

5

新しいインスタンスを作成するたびにRandom、乱数ジェネレーターがリセットされます。デフォルトのコンストラクターはEnvironment.TickCountシードとして使用するため、正確に同じ疑似乱数のシーケンスを返すことがよくあります。システムはそれほど頻繁に更新TickCountされません。これが、非乱数を取得しているように見える理由です。

次のようにコードを変更してみてください。

Private _rnd As New Random()
Function RandomNumber(ByVal low As Integer, ByVal high As Integer) As Integer
    Return _rnd.Next(low, high)
End Function
于 2013-10-30T02:24:54.027 に答える
0

コンピュータ システムには真のランダム性はありません。「乱数」を生成するアルゴリズムは多数ありますが、それらは常に、時間、プロセス ID、両方の組み合わせなどのシードに基づいています。または、ランダム性が真剣に考えられるより高度なケースでは、マイクで検出された音に基づいています。大気センサーまたは宇宙マイクロ波背景からのデータですが、常に何らかの既存の情報源から導出されます。

于 2013-10-30T01:59:25.407 に答える