所以基本上,我有这个函数应该在高数字和低数字之间生成两个随机整数,以在表格上形成一个点。我知道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
如何在点不在对角线上的情况下获得真正的随机数生成?
答案 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)
它似乎运作得很好。 你可以看到并排的差异。
答案 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;
}
您明白了:)