for循环和while循环

for循环和while循环

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>猜数字</title>
</head>
<body>
<script>
    //for循环
    var sum = 0;
    for(i=0; i<=100; i+=2){
        if(i===22 || i===44 ||i===66||i===88) continue;
        sum += i;
        document.writeln(i+'<br/>');
    }
    document.writeln(sum);

    //while循环
    var sum = 0;
    var i = 0;
    while(i<=100){
        if(i===22 || i===44 ||i===66||i===88) continue;
        sum += i;
        i+=2;
        document.writeln(i+'<br/>');
    }
    document.writeln(sum);
</script>
</body>
</html>

老师您好,这段代码用for循环跑是正常可以跑出结果的,但是我改写为while循环之后再运行就浏览器一直转圈了,是这个while循环有问题吗?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,它们两个是有区别的,for循环是给定一个条件让它工作,而while循环是条件满足就会一直工作(条件一直满足就会一直工作),如i<=100( 0 永远小于 100)这个条件始终都会满足所以它就会一直不间断的工作最后浏览器资源被耗尽直至崩溃。也就是说同学见到的直接页面卡死状态,也是我们俗称的死循环。

同学看下面的例子:

https://img1.sycdn.imooc.com/climg/6757ea0409a9361306020218.jpg

所以在项目中是使用for还是while是要好好想想的哈。

祝学习愉快!

  • 慕容2472778 提问者 #1

    老师,但是我给while循环的循环体中写了i+=2;执行条件也没有错呀,这段代码为什么会死循环呢?

        var sum = 0;
        var i = 0;
        while(i<=100){
            if(i===22 || i===44 ||i===66||i===88) continue;
            sum += i;
            i+=2;
            document.writeln(i+'<br/>');
        }


    2024-12-10 15:21:56
  • 好帮手慕小李 回复 提问者 慕容2472778 #2

    我给你写一个简化的例子:

    这段代码是希望从0-10打印出除了5的数字,先说结果它会直接卡死。

    https://img1.sycdn.imooc.com/climg/6757f57609848a0403640181.jpg

    我们乍一看这么写确实符合逻辑,但是这里有一个特别重要的点要注意:

    问题在于continue语句之后的i++。由于continue语句会跳过当前迭代中continue之后的代码,所以当i等于5时,i++不会被执行,这意味着i的值永远不会增加,导致无限循环。


    那么我们的解决方案是不是可以将i++直接提前,无论i的值是什么,i都会在每次循环时增加1。如下:

    https://img1.sycdn.imooc.com/climg/6757f68e09db7cf305580234.jpg

    我们将i++提前结果如下:

    https://img1.sycdn.imooc.com/climg/6757f6ac0998358707570389.jpg

    这个时候ok了。

    那么我们在来看同学的代码是不是也跟我们这个情况一样?

    https://img1.sycdn.imooc.com/climg/6757f71f0966ffec08200289.jpg

    将自增环节提到continue之前达到,无论i的值是什么,i都会在每次循环时达到增加。

    结果是可以的。

    但新的问题出现了,题目中是指从0-100那么也要包含0这个数字,那么代码就需要再做调整如下:

    https://img1.sycdn.imooc.com/climg/6757f8d109dd302c07150418.jpg

    最终如下:

    https://img1.sycdn.imooc.com/climg/6757f9500927b0f803570509.jpg

    看到这里同学是否觉得这么写比较繁琐?我这边儿在给同学一个其他的思路:

    https://img1.sycdn.imooc.com/climg/6757f99d091538b808110256.jpg

    这个思路同学也可以看看。

    祝学习愉快!

    2024-12-10 15:22:55
  • 好帮手慕小李 回复 提问者 慕容2472778 #3

    看看刚刚给你解答的答复。

    2024-12-10 16:21:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师