制作四个随机数,增加最大值

时间:2015-05-05 12:41:28

标签: javascript html function

起初我想说这个问题在这里可能有类似的问题,但我的问题是非常不同的。

我正在制作四个随机数,但是当一个数字低于max/10或高于max/1.2时,我想再次加载该函数,直到得到正确的随机数。我在我的剧本中写了这样的话:

if (first < max / 10 || second < max / 10 || third < max / 10 || fourth < max / 10) { reken(max); }
if (first > max / 1.2 || second > max / 1.2 || third > max / 1.2 || fourth > max / 1.2) { reken(max); }

但它不适合我。我得到的数字低于10,有时高达85.当在if语句之后输入一些愚蠢的内容,例如:if(){ asdhbjka }然后代码崩溃并等待另一秒来运行脚本。通过这种方式,我得到了很好的数字。所以我知道我的if声明仅在reken(max);

出错时才有用

Soo ..希望你能帮助我。

function random(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}

function reken(max) {
    var status = document.getElementById('status');
	var max = 100
    var first = random(1, max / 2.0 - 3);
    var second = random(1, max / 1.5 - 2 - first);
    var third = random(1, max / 1.2 - 1 - first - second);
    var fourth = max - first - second - third;
    if (first < max / 10 || second < max / 10 || third < max / 10 || fourth < max / 10) {
		reken(max);
    }
    if (first > max / 1.2 || second > max / 1.2 || third > max / 1.2 || fourth > max / 1.2) {
        reken(max);
    }
    
    status.innerHTML = first + " - " + second + " - " + third + " - " + fourth + " / " + (first + second + third + fourth );
}
var animateInterval = setInterval(reken,1000);
<p id="status"></p>

1 个答案:

答案 0 :(得分:1)

您的问题可以在递归调用中找到..

让它变得更简单:

function findNumber()
{
   var number = random(0,10);
   if (number < 5)
       findNumber();

   document.GetElementById("labelForMyNumber").innerText(number);
}

让我们运行该代码..会发生什么:

  

第1步:数字= 6

     

第2步:如果失败(数字> 5)

     

第3步:标记获取文字:6

好的,让我们再试一次:

  

第1步:数字= 4

     

步骤2:如果成功(数字<5)

     

第3步:我们再次调用该函数

     

第4步:新号码,这次是8

     

步骤5:如果失败(8> 5)

     

第6步:我们将文本更改为8。

     

BUT !!第7步:我们回到第一个功能!现在再次为4(见步骤1)

     

步骤8:我们将文本更改为4的数字。

你知道吗?当你递归时,你总是在之前返回函数,并继续执行该代码。

现在,如何解决这个问题?

简单的方法就是:

function findNumber()
{
   var number = random(0,10);
   if (number < 5)
       findNumber();
   else
       document.GetElementById("labelForMyNumber").innerText(number);
}

这个逻辑的代码应该是:

function reken(max) {
    var status = document.getElementById('status');
    var max = 100
    var first = random(1, max / 2.0 - 3);
    var second = random(1, max / 1.5 - 2 - first);
    var third = random(1, max / 1.2 - 1 - first - second);
    var fourth = max - first - second - third;
    if ((first < max / 10 || second < max / 10 || third < max / 10 || fourth < max / 10) || (first > max / 1.2 || second > max / 1.2 || third > max / 1.2 || fourth > max / 1.2) {
        reken(max);
    }
    else {
        status.innerHTML = first + " - " + second + " - " + third + " - " + fourth + " / " + (first + second + third + fourth );
    }
}