for循环if if语句不会运行,我不确定为什么

时间:2015-06-07 21:30:43

标签: javascript jquery loops

短暂停顿 - 我使用wad JavaScript library创建随机音调生成器。我正试图让发电机“滑动”。间距之间,如下伪码:

  1. 确定当前音高(randomNum)
  2. 确定下一个音高(randomNext)
  3. 确定下一个音高是高还是低
  4. 播放当前音高并保持一秒
  5. 快速播放当前音高和下一音高之间的所有音高,以提供“滑动”。效果 - 这是不起作用的部分!
  6. 播放下一个音高并保持一秒钟(然后将其重新指定为当前音高)。
  7. 除了第5步之外,我已经完成了所有工作。我正在尝试使用for循环(在if / else语句中根据下一个音高是高还是低)使用计数器迭代每个音高,但< strong>根据我记录的控制台语句,for循环永远不会运行。

    如果我从if语句中删除for循环并从变量手动设置其起始音高,它将按预期运行。

    我做错了什么?我的if语句有问题吗?用我的for循环?

    有问题的代码是:

    // play the first pitch    
    function playFirst() {
                if(!stopped){
                    window.randomNum = Math.round(Math.random()*200 + 100);
                    console.log("randomnum is now "+ randomNum);
                }
                playRandom();
            }
    
    // play and loop subsequent pitches
            function playRandom(){
                if(!stopped){
    
                    var randomNext = Math.round(Math.random()*200 + 100);
                    console.log("randomNext is now " + randomNext);
    
                    var howManyCents = randomNum - randomNext;
                    console.log(howManyCents + " cents");
    
    // ascending note slide condition
                    if (randomNum < randomNext) {
                        console.log("randomnum is less!");
    
                        var inbetweenNum = randomNum + 1;
    
    // for loop - the part with the problem! 
                        for (var i = 0; i < howManyCents; i++) {
                            inbetweenNum = randomNum + i;
                            console.log("inbetween number is " + inbetweenNum); 
                            inbetween.play({ pitch : inbetweenNum });
                            console.log("played inbetween up"); 
                        }
    // descending note slide condition
                    } else {
                        console.log("randomnum is more!");
    
                        var inbetweenNum = randomNum - 1;
    
    // another problematic for loop
                        for (var i = 0; i > howManyCents; i--) {
                            inbetweenNum = randomNum - i;
                            console.log("inbetween number is " + inbetweenNum); 
                            inbetween.play({ pitch : inbetweenNum });
                            console.log("played inbetween down");
                        }
                    } 
    // actually play the note
                    bell.play({ pitch : randomNext, wait: 0 });
                    console.log("played randomnext" + randomNext);
    
    // reassign the new note as the current note
                    randomNum = randomNext;
                    console.log("randomnum is now" + randomNum);
    
                    setTimeout(playRandom,1500); // and loop it
                }
            }
    

    我已经制作了完整程序here的JSFiddle。

    非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

该块的条件是randomNum < randomNext,但howManyCentsrandomNum - randomNext,在这种情况下将为负值。循环条件,然后 - i < howManyCentsi从0开始,将永远不会成立。

您可以使用i < -howManyCents,或将Math.abs(randomNum - randomNext)分配给howManyCentsi > howManyCentsi--

相关问题