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);
}