我正在尝试制作随机数生成器。但问题是,它从0开始,但我会以1
开头var Found=false
var Current = new Array()
var MaxValue=4
var NumUnique=3
var Count=0
var Current = new Array(NumUnique)
GetUnique()
alert("The unique numbers are: " + Current[0] + ", " + Current[1] + ", and " + Current[2])
function GetUnique()
{
for (i=0;Count<NumUnique;Count++)
{
Found=false
var rndValue = get_random()
var j=0
for (j=0;j<Current.length;j++)
{
if (Current[j] == rndValue)
{
Found=true
break
}
}
if (Found)
{
Count--
} else {
Current[Count]=rndValue
}
}
}
function get_random()
{
var ranNum= Math.round(Math.random()*MaxValue);
return ranNum;
}
感谢, 问候
答案 0 :(得分:3)
你有一个0-maxvalue的值,你想要1到maxvalue?我建议这个
var ranNum= Math.round(Math.random()*(MaxValue-1))+1;
答案 1 :(得分:3)
@ Nanne的答案解决了这个问题的0元素的起点,但只是阅读这段代码我建议你也改变你的独特随机数发生器(虽然我意识到这不是你要问的问题)。
你的算法对于最大值为4只有3个唯一条目是可以的,但是如果你想开始创建数以千计的唯一条目,你的算法运行得非常慢,你想得到的唯一数字的数量就越多(它是为O(n ^ 2))。
所以,比如说,如果你想在9999号上找到10000个唯一数字,你可能会扫描整个阵列数百次,直到你想出一个你还没有看过的数字。
更好的方法取决于你想要什么。如果你想要一个范围内的随机序列的唯一数字,那么最好从一个有序的增加值数组开始,然后简单地将该数组混乱一段时间随机交换值。假设n个唯一数字使得n个随机交换,这是O(n)。
如果您需要非常广泛的随机数,则需要将生成的数字存储在字典中,以便快速查找已生成的数字。我想这也是O(n)。