JS05-循环控制语句(//while循环//(do while)//for循环//死循环)

while循环

while循环语句
基本语法:
循环语句的基本语法格式 由 4 部分组成

1,设定循环变量的初始值
2,判断进入循环的条件
3,循环体
4,步长
在这里插入图片描述
案例: 上周日是3.8妇女节,我忘了送媳妇儿礼物了
媳妇儿让我写检查, 老婆大人我错了,我下次不会再犯了 , 写一万遍
此时的我,怎么办? 复制粘贴只是初级程序员的

方法
可以让 老婆大人我错了,我下次不会再犯了 输出字符串 重复操作 1万次

var i = 1;
while(i <= 5){
console.log(‘老婆大人我错了,我下次不会再犯了’);
i++;
}
console.log(i)

当循环执行时,只有第一次循环时,执行var i = 1
之后的循环,是 while 程序内部的循环, 判断条件,循环体,步长之间的循环
var i = 1; 只会执行一次

while 循环的 执行步骤 和 执行原理

             i的数值       判断进入循环的条件     循环体         步长
第一次循环     i是1      i<=5 --- true 进入循环    输出       i++ --- i是2
第二次循环     i是2      i<=5 --- true 进入循环    输出       i++ --- i是3  
第三次循环     i是3      i<=5 --- true 进入循环    输出       i++ --- i是4  
第四次循环     i是4      i<=5 --- true 进入循环    输出       i++ --- i是5  
第五次循环     i是5      i<=5 --- true 进入循环    输出       i++ --- i是6  
第六次循环     i是6      i<=5 --- false 不再进入循环,整个循环终止

一共执行了5次输出,在第六次循环时终止
当循环停止是, 循环变量 i 是 6

总结:
循环语句分成 4个部分
1,定义循环变量的初始值
通过循环变量的数值和判断进入循环的条件,来定义循环的次数
2,定义判断进入循环的条件
如果 条件 执行结果是 true , 会进入循环 { } 执行循环体内容
如果 条件 执行结果是 false , 终止循环,整个循环结束
3,循环体
每次循环执行的程序内容
4,步长
每次执行,循环变量改变的数值
循环执行的步骤 过程
12(true)34 - 2(true)34 - 2(true)34 - 2(false)终止循环

do…while
是while语句的一种特殊语法形式
作用就是确保,循环可以至少执行一次
实际项目中,基本不用

当前情况下,i的数值,不满足执行循环条件
循环不会执行

var i = 0;
while(i > 10){
    console.log('我执行了');
    i++;
}
console.log('')

do…while 会确保循环至少执行一次,即时不符合条件

var i = 0;
do{
    console.log('我执行了');
    i++;
}while(i > 10)

demo
1, 如果我们的循环变量,不参与循环体的程序执行
那么循环变量和步长,可以任意设定,只要能满足训话次数即可

例如,要输出5次,张老师帅呆了
var i = 101;
while(i<=110){
    console.log("张老师,帅呆了");
    i+=2;
}

2,实际操作中,循环变量 i 往往要参与循环体的执行
此时 循环变量初始值的设定 和 步长 就要满足条件

现在要输出 1-10 的数值

             i的数值    判断条件         循环体                  步长        
第一次     i是1    i<=10---true   输出i,也就是1      i++ --- i是2
第二次     i是2    i<=10---true   输出i,也就是2      i++ --- i是3
第三次     i是3    i<=10---true   输出i,也就是3      i++ --- i是4
.......
第十次     i是10   i<=10---true   输出i,也就是10      i++ --- i是11
第十一次   i是11   i<=10---false 终止循环

var i = 1;
while(i <= 10){
    console.log(i);
    i++;
}

3, 循环和if的配合

输出 1 - 10 中 , 所有的偶数

思路1: 循环生成1-10的所有整数
然后判断 这个数值是否是 偶数,如果是,执行输出,如果不是没有操作

var i = 1;
while(i <= 10){
    嵌套在循环{ } 中的 if判断
    这个if判断,也是循环体的一部分
    每次循环,if判断也会执行
    如果这个循环变量 i 的数值 可以被 2整除,也就是 此时的i 是偶数
    就执行输出
    否则就直接执行 步长 i++ 没有输出内容
    if(i % 2 == 0){
        console.log(i + '是偶数');
    }
    i++;
}

总结,这种思路,会循环10次,执行10次判断,5次是true,有输出,5次是false没有输出内容

思路2:优化程序
思路1:是生成1-10的所有数值,判断是偶数输出
思路2:可以直接生成1-10的偶数,直接输出,循环次数少,并且还不用判断,效率会提高—程序优化
所谓的偶数,相邻的两个偶数相差是2,偶数之间,步长是2
只要找到第一个偶数,将步长设定为2,获取到的就都是偶数了
1-10之间,第一个偶数是2 , 步长是 2 也就是 i+=2

var i = 2;
while(i <= 10){
    console.log(i);
    i+=2;
}

案例:输出 1-100 中 可以被 2和3,整除的数值

思路1: 循环生成 1-100所有的数值
如果当前数值可以被2和3整除,就输出这个数值

var i = 1;
while(i <= 100){
    if(i % 2 == 0 && i % 3 == 0){
        console.log(i + '可以被2和3整除');
    }
    i++;
}

思路2,可以被2和3整除,也就是可以被6整除
相邻的两个数值,步长是6
找到第一个被2和3整除的数值,并且设定步长是6,就可以循环生成所有需要的数值
就不想要判断,可以直接输出

1--100,第一个可以被2和3整除的数值是6(最小公倍数)
    var i = 6;
    while(i <= 100){
        console.log(i);
        i += 6;
    }

死循环

死循环
所谓的死循环值的是,循环会一直判断进入条件,判断结果一直是true
循环也就是会一直执行,不会停止
这样的循环称为死循环

var i = 1;
while(i <= 10){
    window.alert(i);
    i--;
}

for循环

for循环
所谓的for循环,是完全等价于 while 循环
任何一个for循环都可以写成while循环,任意一个while循环,也可以写成for循环
两个语法,只是形式不同,作用,功能等全都完全相同
for循环 等价于 while循环

while循环和for循环,都有各自的应用场景
如果是: 未知循环次数的 循环程序,往往使用while循环来执行
所谓的未知循环次数,指定是,判断进入循环的条件与循环变量无关

特别注意的问题 for循环 () 中的内容顺序不能改变
for()中内容的顺序是:
for( 定义循环变量的初始值 ; 判断进入条件 ; 步长 ){
循环体
}

但是 执行顺序, 仍然是 1234 — 234 — 234
定义循环变量的初始值,判断进入条件,循环体,步长 ----
仍然是先执行循环体,再执行步长

for循环的优点之一,是将与循环变量和循环次数相关的设定,都定义在()中
设定内容更加集中,不容易造成语法形式混乱
在这里插入图片描述
demo1
生成一个随机的3位数 100 - 999
需要生成数值 666 , 看随机多少次,获取到的666

实现的思路 : 循环执行 随机数 每次循环都会有一个新的随机数的生成
当这个随机数,不是 666 的时候,继续进入循环,生成新的随机数
当这个随机数,是 666 的时候,停止循环

初始时,初始值只要不是666,可以进入循环即可
    var num = 0;
定义一个变量,来计算循环的次数
这个变量的初始值 是 0
    var time = 0;
此时判断进入训话的条件是 num 中存储的数值
循环变量,和循环变量的步长,与 循环执行,就没有关系了
    while( num != 666 ){
        通过循环,赋值一个随机3位数
        num = parseInt(Math.random()*(999+1-100) + 100 );
        每次循环,记录训话次数的变量,自增1,表示循环过一次
        time++;
    }
循环执结束,num 中 存储的数值,就是666
    console.log(num);
    console.log(time);

demo2

输出 1-100所有的偶数
    var i = 2;
//whil
    while(i <= 100){
        console.log(`${i}是偶数`);
        i += 2;
    }
//for
    for( var i = 2; i <= 100 ; i += 2 ){
        console.log(`${i}是偶数`);
    }

demo3
输出 1-100 所有可以被 2,5 整除的数值

第一个可以被2和5整除的数值是10
循环变量的初始值就是10
步长是 2,5 的最小公倍数,是10
for( var i = 10 ; i <= 100 ; i += 10 ){
    console.log(`${i},是可以被2,5整除的数值`);
}

demo4 累加求和

我们通过 += 运算符,来实现累加求和效果
var res = 0;    定义变量,用来存储执行结果
res += 1;       +=1,就是在原有数值基础上+1,也就是累加1  
res += 2;       +=2,在执行了累加1的基础上,再累加2
res += 3;
res += 4;
console.log(res);  //最后输出累加结果

例如要计算 1-100的所有整数的和
思路: 1,通过循环实现1-100的所有数值
      2,执行累加求和
         +=  执行的是累加,也就是在存储的原始数值基础上,在加上新的数值
         ++  每次只能加1,不能累加不同的额数值
         因此,此处,使用 += 来实现效果

定义一个变量,来存储累加执行的结果
累加的初始值是0
var res = 0;
for(var i = 1 ; i <= 100 ; i++){
    res += i; // i 就是执行累加的数值,是从1-100循环生成的整数数值
}
循环结束之后,输出累加结果 res 
console.log(res);

程序中需要注意的问题
1,res变量的定义,一定要放在for循环之外
如果将 var res = 0 的赋值语句,定义在 for循环内
每次执行 res都会重新赋值为 0 ,没法实现累加
2,console.log(),输出,在循环结束后,只要输出一次就可以了
没必要写在循环中,每次都输出

demo5, 阶乘
例如 5的阶乘 5! 表示的意思是 求 12345 的累乘结果
实现思路
1, 通过循环 来 生成 1 至 阶乘数值 的所有整数
2, 实现累乘
定义一个变量,来存储累乘的结果
通过 *= 来实现累乘

      
定义一个随机阶乘数值 5-20
    var num = parseInt(Math.random()*(20+1-5) + 5);        
定义一个变量,来存储累乘结果
初始值要是1
    var res = 1;
循环的初始数值是 1 , 循环的最大数值是阶乘数值 也就是 num 变量
    for(var i = 1 ; i <= num ; i++){
        res *= i;
    }
循环结束,输出结果
    console.log( `${num}的阶乘结果是${res}` );

break 和 continue

循环语句中的关键词

1 , break 终止循环
终止当前循环break关键词之后,程序的执行,以及终止之后的循环
终止一切

2 , continue 跳出循环
终止当前循环continue关键词之后,程序的执行,但是会继续之后的循环
只终止当前循环的循环体的执行,循环会继续

break demo
    for(var i = 1 ; i <= 10 ; i++){
          if( i == 5){
              break;
          }
          console.log(i);   → 1234(数字竖着排列)
     }

没有break , 执行结果是 输出1-10的整数
当 i 循环至 5 , i == 5 判断那结果是true , 会执行if中的break
首先 当前循环中 console.log(i) 是在 break 之后,不会执行
其次 之后应该执行的循环次数 6 7 8 9 10 也都不执行了
尤其 是当前循环中的步长也不会执行 i 就是 5

一般是提前结束循环,调高程序的执行效率
例如 : 质数的判断
如果一旦发生整除的情况,就可以立即判断,数值为合数
之后的循环,就是多余的循环,不用再执行了

for(var i = 1 ; i <= 10 ; i++){
if( i == 5){
continue;
}
console.log(i); →1234678910(数字竖着排列)
}

总结 :
break : 就到 4 , 5以后都没有了
continue : 就 少一个5, 其他都正常

输出 1 - 100 的 偶数
    for(var i = 1 ; i <= 100 ; i++){
        // 需要输出偶数,也就是如果是奇数,就跳出循环不输出
        if( i % 2 != 0 ){
            continue;
        }
        console.log(i);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值