【问题标题】:Javascript do while loop not stoppingJavascript做while循环不停止
【发布时间】:2017-10-29 00:14:21
【问题描述】:

我正在尝试创建一个计算以获取起始编号、结束编号和步数,以显示开始和结束之间的所有偶数按步值计数。
我的循环的逻辑似乎有问题,因为它不会停止并崩溃。

    <!DOCTYPE html>
    <html>
    <body>

    <h2>JFinding all even numbers</h2>

    <p>Please input a starting number, ending number and step number:</p>

    Starting Number: <input id="start">
    Ending Number: <input id="end">
    Step by Number: <input id="step">

    <button type="button" onclick="myFunction()">Submit</button>

    <p id="demo"></p>

    <script>
    function myFunction() {
        var start, end, step, text;
        var result = [];

        // Get the value of the start number with start var
        start = parseInt(document.getElementById("start").value);
        // Get the value of the end number with end var
        end = parseInt(document.getElementById("end").value);
        // Get the value of the step number with step var
        step = parseInt(document.getElementById("step").value);
        console.log('start', start);
        console.log('end', end);
        console.log('step', step);
        // If start, end, or step is Not a Number or step is not even or start is greater than end or step is greater than end or start and step are equal to end
        if (isNaN(start) || isNaN(end) || isNaN(step) || step % 2 !== 0 || start > end || step > end || step === end || start === end) {
            //display text for invalid input
            text = "Input not valid";
            //display text to html page
            document.getElementById("demo").innerHTML = text;
            //else create a loop to find even numbers
        } else { 
            if(start % 2 === 0){
            for(var i = start; i <= end; i += step){
                          result.push(i);
                }
            } else {
                start += 1;
                for(var i = start; i <= end; i += step){
                          result.push(i);
                }
            }
            //sent the result to the html page
            document.getElementById("demo").innerHTML = result;
    }
    console.log(result);
}
    </script>

    </body>
    </html> 

【问题讨论】:

  • sum 永远不会超过start + step,因为sum = start + step; 您可能希望将 sum 初始化为 = start,然后将该行更改为 sum += step;

标签: javascript html forms loops


【解决方案1】:

我想你想做的是拥有

sum = start

在循环之前。还有

sum += step

在循环中

【讨论】:

    【解决方案2】:

    问题出在代码的倒数第三行。该行即将将 var sum 推送到结果的末尾,但您正在推送 start 变量,这就是循环没有停止的原因

    【讨论】:

      【解决方案3】:

      几个问题:

      • 在 Chrome 中进行测试时,我需要 parseInt() 值才能使用它们
      • isNaN 一次只接受 1 个参数
      • 在我们的while循环中,我们需要增加sum,比如+=或者sum = sum + step
      • 我们要保存总和,而不是起始值
      • 我们还想检查总和是否为有效数字或偶数
      • 此外,执行 while 循环可能会很难获得迭代 while 条件设置正确,这样您就不会进行一对多或太少的迭代。正如我们所看到的,如果我们没有正确设置所有内容,它们很容易无休止地运行。在这种情况下,我建议尝试一个 for 循环

          <!DOCTYPE html>
          <html>
          <body>
      
          <h2>JFinding all even numbers</h2>
      
          <p>Please input a starting number, ending number and step number:</p>
      
          Starting Number: <input id="start">
          Ending Number: <input id="end">
          Step by Number: <input id="step">
      
          <button type="button" onclick="myFunction()">Submit</button>
      
          <p id="demo"></p>
      
          <script>
          function myFunction() {
              var start, end, step, text;
              var result = [];
      
              // Get the value of the start number with start var
              start = parseInt(document.getElementById("start").value);
              // Get the value of the end number with end var
              end = parseInt(document.getElementById("end").value);
              // Get the value of the step number with step var
              step = parseInt(document.getElementById("step").value);
              console.log('start', start);
              console.log('end', end);
              console.log('step', step);
              // If start, end, or step is Not a Number or step is not even or start is greater than end or step is greater than end or start and step are equal to end
              if (isNaN(start) || isNaN(end) || isNaN(step) || step % 2 !== 0 || start > end || step > end || step === end || start === end) {
                  //display text for invalid input
                  text = "Input not valid";
                  //display text to html page
                  document.getElementById("demo").innerHTML = text;
                  //else create a loop to find even numbers
              } else { 
                  
                  for(var i = start; i <= end; i += step){
                      if(i % 2 === 0){
                          result.push(i);
                      }
                  };
                  //sent the result to the html page
                  document.getElementById("demo").innerHTML = result;
          }
          }
          </script>
      
          </body>
          </html> 

      另请注意,代码要求步骤为偶数:step % 2 !== 0,因此我们获得任何结果的唯一方法是起始编号也是偶数。

      【讨论】:

        【解决方案4】:

        在循环过程中 step 和 start 都不会改变,因此 sum 在每次迭代后都不会改变。

        您可以按如下方式更改您的代码:

        sum = start;
        do {
          sum += step;
          result.push(start);
        }
        

        您还可以使用 FOR 循环以更简单的语法实现相同的行为。

        【讨论】:

          猜你喜欢
          • 2011-09-25
          • 1970-01-01
          • 1970-01-01
          • 2020-06-03
          • 2015-12-30
          • 2021-08-18
          • 1970-01-01
          • 2021-11-18
          • 1970-01-01
          相关资源
          最近更新 更多