亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的 javascript for 循環沒有執行任何操作,而是凍結了我的網頁?

為什么我的 javascript for 循環沒有執行任何操作,而是凍結了我的網頁?

嚕嚕噠 2023-10-14 09:52:11
我無法弄清楚為什么我的代碼不起作用。這是一個非常簡單的程序,所以我確信我缺少或沒有看到一些東西,但我似乎無法弄清楚。請幫忙!它應該做什么:接受兩個數字并找到下一個大于第一個數字并且也能被第二個數字整除的數字。發生了什么:它基本上只是凍結了我的計算機,似乎循環繼續運行而不停止。JS:function divisibleBy(first, second) {    var firstNum = document.getElementById('firstNumber').value;    var secondNum = document.getElementById('secondNumber').value;    for (var i = firstNum + 1; i > firstNum; i++) {        if (i % secondNum === 0) {            document.getElementById('result').innerHTML = i;        }    }}HTML:<body>    <header>        <h1>Let's Do Some Math!</h1>        <h2>Type in <u>two</u> numbers and let's figure out the next <br>            number greater than those two numbers but with a catch...<br>            the number has to be <u>divisible</u> by the second number you choose.</h2>    </header>    <hr>    <ul>        <li>            <label for="firstNumber">First Number:</label>            <input type="number" id="firstNumber">        </li>        <li>            <label for="secondNumber">Second Number:</label>            <input type="number" id="secondNumber">        </li>        <li>            <button type="submit" onclick="divisibleBy();">GO</button>        </li>    </ul>    <h2 id="result"></h2>    <hr></body>
查看完整描述

2 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

問題:問題是你的for-loop的條件語句是always ,這會導致無限循環,因此頁面無響應。在這種情況下也不需要為函數提供參數true


解決方案:


這個問題可以用數學方法解決,無需循環。


// BEST APPROCH

function divisibleBy() {

    var firstNum = parseInt(document.getElementById('firstNumber').value);

    var secondNum = parseInt(document.getElementById('secondNumber').value);

    

    var result = secondNum*parseInt(firstNum/secondNum+1);

    document.getElementById('result').innerHTML = result;

    

}

但是,如果您確實需要使用循環,這里是解決方案,但請記住,在for 循環中設置限制幾乎與上述解決方案相同(或將條件設置為i <= firstNum*secondNum,因為它在遇到解決方案時已經有了break語句)


// WORST APPROCH

function divisibleBy() {

    var firstNum = parseInt(document.getElementById('firstNumber').value);

    var secondNum = parseInt(document.getElementById('secondNumber').value);

    

    for (var i = firstNum+1; i <= secondNum*(firstNum/secondNum+1); i++) {

        if (i % secondNum === 0) {

            document.getElementById('result').innerHTML = i;

            break;  

        }

    }

}

但我建議使用循環,這將更令人滿意地解決這個問題,并忽略對上述代碼中的do-While限制進行不必要的計算。i


// BEST LOOP/SIMPLE APPROCH 

function divisibleBy() {

    var firstNum = parseInt(document.getElementById('firstNumber').value);

    var secondNum = parseInt(document.getElementById('secondNumber').value);

    

    do{

        firstNum++;

    }

    while(firstNum%secondNum != 0)

    document.getElementById('result').innerHTML = firstNum;

}


查看完整回答
反對 回復 2023-10-14
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

你正在使用 for (var i = firstNum + 1; i > firstNum; i++)并且這個條件總是滿足。因此它會無限循環。


嘗試這個 :


 for (var i = firstNum + 1; ; i++) {

        if (i % secondNum === 0) {

            document.getElementById('result').innerHTML = I;

              break;

        }

    }


查看完整回答
反對 回復 2023-10-14
  • 2 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號