独特的随机序列的javascript [英] unique random array javascript

查看:126
本文介绍了独特的随机序列的javascript的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建6个独特的随机数的数组出数组的用户给他的最大值和最小值(不低于0则没有高于37)。
什么是不正确的?

I am trying to create an array of 6 unique random numbers out of an array that the user gave his max value and min value (no lower then 0 and no higher then 37). What is incorrect?

    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;
                }
            }
        }
    }

不知道如何使它工作?

Any idea how to make it work?

推荐答案

下面是最低和最高值之间创建N个随机数的核心功能。

Here's a core function for creating N random numbers between a min and max value.

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信息另一个函数把这个包,检查是否一切都在范围内,然后再调用这个核心功能。

This function has nothing to do with the DOM or any particular limits of your problem. You can then wrap this with another function that retrieves info from the DOM, checks to see if everything is in range and then calls this core function.

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个随机值,可重复使用的功能,并保持了效用函数从code访问在一个特定页面的DOM来完全分开的。因为方式这使用一组来跟踪所用的随机数,这是可扩展到非常大的数字范围或非常大的数字的随机数,当该prebuild所有可能的输出的一个列表中的某些其它算法不作为可扩展性。

This makes a reusable function for generating N random values and keeps that utility function completely separate from your code that accesses the DOM in one particular page. Because of the way this uses a set to keep track of the used random numbers, this is scalable to very large numeric ranges or very large numbers of random numbers when some other algorithms that prebuild a list of all possible outputs are not as scalable.

工作演示: http://jsfiddle.net/jfriend00/48kCg/

这篇关于独特的随机序列的javascript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆