2017-05-28 108 views
0

我想創建一個計算採取起始號,結束數和步數由步長值,以顯示所有甚至開始和結束計數之間的數字。
似乎是壞了我的循環的邏輯,因爲它不會停止和崩潰。的Javascript做while循環不停止

<!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>

+0

'sum'不會提升過去'啓動+ step'因爲'總和=開始+步驟,'你可能要爲start初始化的金額,然後把上面一行'總和+ =步;' – James

回答

1

我想你想要做的是有

sum = start 

循環之前。而

sum += step 

循環

0

問題裏面是你的代碼的第三個最後一行。該行即將向VAR和推到結果的末尾,但你是推啓動變量,而不是,這就是爲什麼循環沒有停止

0

無段差開始在循環過程正在發生變化,從而總和後不改變每次迭代。

你可以改變你的代碼如下:

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

你也可以使用一個FOR循環使用更加簡單的語法來實現相同的行爲。

0

幾個問題:

  • 當Chrome瀏覽器測試,我需要parseInt函數()的值與他們爲了工作
  • isNaN只接受一次
  • 1個參數在while循環,我們需要增加金額,如用+=sum = sum + step
  • 我們要保存的總和,而不是起始值
  • 我們還需要檢查,看是否總和是有效的,甚至,數
  • 另外,do-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,所以我們唯一的出路如果起始數字也是一樣的話,會得到任何結果。