真随机数生成

时间:2013-10-30 01:55:39

标签: vb.net random numbers generator

所以基本上,我有这个函数应该在高数字和低数字之间生成两个随机整数,以在表格上形成一个点。我知道Random可以处理这个问题,但Random有一致性,而我需要数字在表单上完全随机。

例如,我生成的大部分点都出现在对角线上。这是我想要避免的。它应该遍布高低数字之间的形式。

这是我目前的职能:

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

如何在点不在对角线上的情况下获得真正的随机数生成?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

计算机系统中没有真正的随机性。有许多算法可以生成"随机"数字,但它们总是基于种子,如时间,进程ID,两者的混合,或者在认真对待随机性的更高级情况下,在麦克风中检测到的声音,来自大气传感器或宇宙微波背景的数据,但它总是来源于一些现有的信息来源。

答案 2 :(得分:0)

这也不是最好的洗脱剂。 我更喜欢自己的代码:

 Dim old As Integer = 6572
Public Function Rand(ByVal min As Integer, ByVal max As Integer) As Integer
    Dim random As New Random(old + Date.Now.Millisecond)
    old = random.Next(min, max + CInt(IIf(Date.Now.Millisecond Mod 2 = 0, 1, 0)))
    Return old
End Function

多好一点

答案 3 :(得分:0)

我真的想出了这个解决方案。也许它会有所帮助=)

我来自:

D:\>convert -d 300 foo.pdf bar.png

Dim rand As Random = New Random(DateTime.Now.Millisecond)

它似乎运作得很好。 你可以看到并排的差异。

Random Compare

答案 4 :(得分:0)

在Java中(假设限制为(limit-1)):

function openModal() {
  document.getElementById("myModal").style.display = "block";
}

function closeModal() {
  document.getElementById("myModal").style.display = "none";
}

var slideIndex = 1;
showSlides(slideIndex);

function plusSlides(n) {
  showSlides(slideIndex += n);
}

function currentSlide(n) {
  showSlides(slideIndex = n);
}

function showSlides(n) {
  var i;
  var slides = document.getElementsByClassName("mySlides");
  var dots = document.getElementsByClassName("demo");
  var captionText = document.getElementById("caption");
  if (n > slides.length) {slideIndex = 1}
  if (n < 1) {slideIndex = slides.length}
  for (i = 0; i < slides.length; i++) {
      slides[i].style.display = "none";
  }
  for (i = 0; i < dots.length; i++) {
      dots[i].className = dots[i].className.replace(" active", "");
  }
  slides[slideIndex-1].style.display = "block";
  dots[slideIndex-1].className += " active";
  captionText.innerHTML = dots[slideIndex-1].alt;
}

您明白了:)