Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
唯一随机数组javascript_Javascript_Arrays - Fatal编程技术网

唯一随机数组javascript

唯一随机数组javascript,javascript,arrays,Javascript,Arrays,我试图从用户给出的最大值和最小值(不低于0,不高于37)的数组中创建一个包含6个唯一随机数的数组。 什么是不正确的 function randCalc(maxVal,minVal) { var maxVal = document.getElementById("maxRange").value; var minVal = document.getElementById("minRange").value; var tmpArray

我试图从用户给出的最大值和最小值(不低于0,不高于37)的数组中创建一个包含6个唯一随机数的数组。 什么是不正确的

    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;
                }
            }
        }
    }
函数randCalc(maxVal,minVal)
{
var maxVal=document.getElementById(“maxRange”).value;
var minVal=document.getElementById(“minRange”).value;
var tmpArray=新阵列(6);
tmpArray=[0];
var realArray=新数组(6);
realArray=tmpArray;
如果((最大值-最小值)<6)
{
警报(“差值不能低于6”);
}
如果(minVal37)
{
抛出警报(“
越高的值不能高于37”); }
如果(minVal>0&((maxVal-minVal)>=6)&&(maxVal),这里有一个核心函数,用于在最小值和最大值之间创建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;
}
函数randCalc(maxVal、minVal、numRandoms){
var max=Math.max(maxVal,minVal);
var min=Math.min(maxVal,minVal);
//创建一个集合来跟踪我们已经使用过的数字
//我们不会重复任何随机数
变量集={};
var randoms=[];
var rand;
//如果没有提供足够的范围,则防止无限循环
如果(最大-最小
此函数与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);
}
函数makeRandoms(){
//检索DOM值并将其转换为数字
var maxVal=document.getElementById(“maxRange”).value;
var minVal=document.getElementById(“minRange”).value;
如果(!maxVal | |!minVal){
警报(“必须同时指定最小值和最大值”);
返回;
}
//将两者转换为数字
maxVal=parseInt(maxVal,10);
minVal=parseInt(minVal,10);
如果(最小值<1){
警报(“最小值不能低于1”);
返回;
}
如果(最大值>37){
警报(“较高的值不能高于37”);
返回;
}
如果(最大值-最小值<6){
警报(“差值不能低于6”);
返回;
}
var randoms=randCalc(最大值,最小值,6);
//在此处输出随机数组
document.getElementById(“输出”).innerHTML=JSON.stringify(随机数);
}
这将生成一个可重用的函数,用于生成N个随机值,并使该实用程序函数与在一个特定页面中访问DOM的代码完全分离。由于这种方法使用一个集合来跟踪所使用的随机数,因此可以扩展到非常大的数值范围或非常大的随机数其他预构建所有可能输出列表的算法没有那么可伸缩


工作演示:

这是一个更简单的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;
}
函数randCalc(maxVal,minVal){
var text=“”;
var可能=[];
对于(var i=minVal;i6){
text=text.substring(0,6);
}
}
返回文本;
}

这一切看起来相当复杂。您可以使用以下方法创建一个数组,其中[
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);
函数createArrayWithUniqueRandomNumbers(n,最大值){
var checkobj={}
,arr=[];
while(arr.length
您的

标记应该是


(虽然这只是一个简单的语法错误,几乎肯定不是您的实际问题)…旁注:您对JavaScript有误解。行
var tmpArray=new Array(6);
定义一个变量,创建一个数组,并将其分配给变量。下一行
tmpArray=[0]
创建一个新数组并将其分配给变量。第一个数组被释放并丢弃。第一行只需
var tmpArray;
即可。我会以不同的方式思考问题。首先将逻辑与DOM分离。然后取一个从“min”到“max”的范围我明白你的意思,你能给出一些代码来解释如何实现吗?这如何避免在结果中多次重复使用随机数?它没有!这是一个要求吗?问题是“创建一个由6个唯一随机数组成的数组”.jfriend00-非常感谢您的解决方案非常有效,我花了一些时间来理解它。有一个条件我不熟悉,它有助于解决方案的简单性:if(!(rand in set))。