Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.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 For语句未按预期工作_Javascript_For Loop - Fatal编程技术网

Javascript For语句未按预期工作

Javascript For语句未按预期工作,javascript,for-loop,Javascript,For Loop,这里的程序员不是很有经验 长话短说,我正在尝试制作一个小型太阳系类型的东西,当恒星的质量加上行星的质量大于或等于行星到恒星中心的距离除以2时,行星应该落入恒星 for(i = 0; i < planetamount; i++){ if((starmass+planetmass[i]) >= (initialradius/2)){ radius[i]--; } } 那么,让我们检查一下 starmass + planetmass = 100 + 10

这里的程序员不是很有经验

长话短说,我正在尝试制作一个小型太阳系类型的东西,当恒星的质量加上行星的质量大于或等于行星到恒星中心的距离除以2时,行星应该落入恒星

for(i = 0; i < planetamount; i++){
    if((starmass+planetmass[i]) >= (initialradius/2)){
        radius[i]--;
    }
}
那么,让我们检查一下

starmass + planetmass = 100 + 10 = 110
initialradius/2 = 150/2 = 75
我们可以很明显地看到,110大于或等于75(在本例中大于),但行星并没有落入恒星(是的,这是一个不断更新的画布动画,所以它应该可以工作,因为它之前是出于某种原因)。半径[0]的值不会改变。 这个for循环位于requestAnimationFrame()函数中的信息可能会有所帮助

我真的希望这不会太令人困惑(可能是这样),但如果有人能给我一个简单的答案,那就太好了


-JReesW

查看它在循环中迭代了多少次

我可能对你的目标有误解,但试一试,告诉我你的想法:

for(var i = 0; i < planetamount; i++){
    if((starmass+planetmass[i]) >= (initialradius/2)){
        while(radius[i]>0) { radius[i]--; }
    }
}
for(变量i=0;i=(初始半径/2)){
而(半径[i]>0){radius[i]--;}
}
}

函数本身工作正常:在第一次(也是唯一一次)迭代后,它返回149的半径[0]值(即150减去1)。以下是测试代码段:

<!DOCTYPE html>
<html>
<body>
<p id="radius0"></p>
<script>
        starmass = 100;
        planetmass = [10];
        radius = [150];
        initialradius = radius[0];
        planetamount=1;
        function test() {
            for (i = 0; i < planetamount; i++)
            {
                if ((starmass + planetmass[i]) >= (initialradius / 2))
                {
                    radius[i]--;
                }
            }
            return radius[0];
        }
        document.getElementById("radius0").innerHTML = test();
</script>
</body>
</html>

恒星质量=100; 行星质量=[10]; 半径=[150]; 初始半径=半径[0]; planetamount=1; 功能测试(){ 对于(i=0;i=(初始半径/2)) { 半径[i]-; } } 返回半径[0]; } document.getElementById(“radius0”).innerHTML=test();
因此,这个问题存在于代码的另一部分,而您的文章中没有包含这一部分


希望这能有所帮助。

对于在编辑之前来到这里的任何人,我在第三个cole块混淆后的第一行中有75和110的值,顺便说一句,问题仍然存在。我建议打开控制台(点击F12),然后添加
console.log(starmass,planetmass[I],initialradius)
。这将向您显示它们的实际值,您可以了解出了什么问题。A起作用,所以我需要查看实际示例以了解更多。@MikeC我这样做了,出于某种原因,它只是给了我星体质量和初始半径作为其正确值,但行星质量[I]未定义。进入控制台。日志(i)给出1@JReesW请记住,数组是零索引的。因此,您需要确保您正在访问
planetmass[0]
。另外,当
undefined
转换为数字时,它是
0
。这就是为什么计算似乎是错误的。问题是它可以工作,但它会使行星的半径立即变为0,但我试图做的是,它将半径减小1,然后在整个函数按window.requestAnimationFrame(Update).hm.循环后再减小1。。是否尝试在几个循环后使其变为0?是的,但不使用for循环。for循环只需穿过所有行星(目前只有1颗)。由于此for循环所处的window.requestAnimationFrame(),它在几秒钟后变为0。您可能永远不会实际达到0。。它只会逐渐减小,直到恒星质量+行星质量=初始半径/2是的,我知道,但这是不必要的,因为我的行星在这之前被破坏了,使用其他公式,它应该能够飞入我的恒星。jsfiddle.net/JReesW/57jwrgwe/1请注意,这里有一些提示。请输入“蓝色”,然后输入“大”,然后输入“关闭”。这给出了一个行星应该落入恒星的场景。另外,请忽略一个事实,我是编程方面的noob,它可以做得更有效,所以请只关注手头的问题。变量从第21行开始,starmass在第50行定义,for循环从第119行开始,问题从第147行开始。请注意,所有其他部分都起作用(或者至少应该起作用)。只是一个快速观察:将质量与半径进行比较似乎是不正确的,即(星体质量+行星质量[i])>=(初始半径/2),我知道,但我不得不想一些事情,这似乎起作用,直到我添加了阵列部分和多个行星的for循环。使用这个公式,如果行星和恒星足够大,并且距离足够近,它就会开始飞入恒星。对不起,这个问题变成了一种“俄罗斯娃娃问题”,看起来更像是一个软件开发/调试的请求。答案已经给了你,与原来的帖子有关。你可以接受也可以不接受,但现在我要结束这个讨论。请单独发布您的附加问题。最好的问候,我会问我的父亲(专业的PHP和JavaScript程序员)关于这一点。很抱歉给您带来不便,我将努力提高提问技巧。谢谢你的帮助!
<!DOCTYPE html>
<html>
<body>
<p id="radius0"></p>
<script>
        starmass = 100;
        planetmass = [10];
        radius = [150];
        initialradius = radius[0];
        planetamount=1;
        function test() {
            for (i = 0; i < planetamount; i++)
            {
                if ((starmass + planetmass[i]) >= (initialradius / 2))
                {
                    radius[i]--;
                }
            }
            return radius[0];
        }
        document.getElementById("radius0").innerHTML = test();
</script>
</body>
</html>