起初我想说这个问题在这里可能有类似的问题,但我的问题是非常不同的。
我正在制作四个随机数,但是当一个数字低于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>
答案 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 );
}
}