我正在尝试从一个数组中创建一个由6个唯一随机数组成的数组,用户给出了他的最大值和最小值(不低于0且高于37)。 什么是不正确的?
function randCalc(maxVal,minVal)
{
var maxVal = document.getElementById("maxRange").value;
var minVal = document.getElementById("minRange").value;
var tmpArray = new Array(6) ;
tmpArray = [0];
var realArray = new Array(6);
realArray = tmpArray;
if ((maxVal - minVal) < 6)
{
alert("</br>The difference cannot be lower then 6");
}
if (minVal<1)
{
alert("</br>The min value cannot be lower then 1");
}
if (maxVal>37)
{
throw alert("</br>The higher value cannot be higher then 37") ;
}
if(minVal>0 && ((maxVal-minVal)>=6)&& (maxVal<=37) )
{
document.writeln("</br>The random numbers are: ");
for(i=0;i<=(6);i++)
{
var randLotto = Math.floor(Math.random() * (maxVal - minVal + 2) + minVal);
tmpArray[i] = randLotto;
}
for(var j=0;j<=maxVal;j++)
{
for(var k=0;k<6;k++)
{
if(tmpArray[j]==realArray[k])
{
j++;
}
else if(tmpArray[j]!=realArray[k])
{
realArray[k]=tmpArray[j];
}
}
if(realArray[6]!=null)
{
break;
}
}
}
}
知道如何让它发挥作用吗?
答案 0 :(得分:1)
这是在最小值和最大值之间创建N个随机数的核心功能。
function randCalc(maxVal, minVal, numRandoms) {
var max = Math.max(maxVal, minVal);
var min = Math.min(maxVal, minVal);
// create a set to keep track of numbers we've already used so
// we don't repeat any random numbers
var set = {};
var randoms = [];
var rand;
// prevent infinite loop if not given enough range
if (max - min < numRandoms) {
return randoms;
}
while (randoms.length < numRandoms) {
rand = Math.floor((Math.random() * (max - min + 1) + min));
// if we haven't already used this random number
// then put it in our output array and add it to the set
if (!(rand in set)) {
randoms.push(rand);
set[rand] = true;
}
}
return randoms;
}
此功能与DOM或您问题的任何特定限制无关。然后,您可以使用另一个从DOM检索信息的函数来包装它,检查是否所有内容都在范围内,然后调用此核心函数。
function makeRandoms() {
// retrieve DOM values and convert them to numbers
var maxVal = document.getElementById("maxRange").value;
var minVal = document.getElementById("minRange").value;
if (!maxVal || !minVal) {
alert("You must specify both a minimum and maximum value");
return;
}
// convert both to numbers
maxVal = parseInt(maxVal, 10);
minVal = parseInt(minVal, 10);
if (minVal < 1) {
alert("The min value cannot be lower then 1");
return;
}
if (maxVal > 37) {
alert("The higher value cannot be higher then 37");
return;
}
if (maxVal - minVal < 6) {
alert("The difference cannot be lower then 6");
return;
}
var randoms = randCalc(maxVal, minVal, 6);
// output the randoms array here
document.getElementById("output").innerHTML = JSON.stringify(randoms);
}
这产生了一个可重用的函数,用于生成N个随机值,并使该实用程序函数与访问某个特定页面中的DOM的代码完全分开。由于这种方法使用集合来跟踪使用的随机数,因此当预建所有可能输出列表的其他算法不具有可扩展性时,这可以扩展到非常大的数值范围或非常大量的随机数。 / p>
答案 1 :(得分:0)
这是一个JS函数,更简单,就是你假装的东西:
function randCalc(maxVal,minVal){
var text = "";
var possible = [];
for(var i = minVal; i < maxVal; i++){
possible.push(i);
}
for( var i=0; i < 6; i++ ){
if(text.length == 6){
return text;
}
text += possible[Math.floor(Math.random() * possible.length)];
if(text > 6){
text = text.substring(0, 6);
}
}
return text;
}
答案 2 :(得分:0)
一切看起来都很复杂。您可以使用以下内容创建一个[n
]随机数介于0和[max
]之间的数组:
function createArrayWithUniqueRandomNumbers(n, max) {
var checkobj = {}
,arr = [];
while (arr.length < n) {
var x = Math.floor(Math.random()*(max+1));
if (!(x in checkobj)) {
checkobj[x] = 1;
arr.push(x);
}
}
//sorting for convenience
return arr.sort(function(a,b){return a-b;});
}
// usage
var myarr = createArrayWithUniqueRandomNumbers(6, 37);