day3 循环
一、while循环
循环是重复性做一件事
我们没有办法控制每次循环的时间长度
循环会增大您的程序时间复杂度 不建议无限循环嵌套 一般情况下不会嵌套超过两次
死循环是不会停止的循环,会导致您的电脑内存溢出 从而蓝屏(避免死循环)
循环分为很多种常见有三种 while循环 do while循环 for循环
写法
var 定义初始终
while(布尔类型表达式){
循环体(迭代 初始值变化 操作)
}
var i=0//初始值定义
while(i<10){
i++//迭代,如果没有会导致死循环
console.log(i);//操作
}
1~100的和
var res=0
var i=1
放入循环体里面的代码会循环执行,放到外面只执行一次
while(i<=100){
res+=i//将i的值累加给res
i++//迭代
}
console.log(res);
var i=0
while(++i<=100){//执行101次
res+=i//执行100次
}
console.log(res);
循环四要素 初始值 迭代量(不写 死循环) 循环体 条件判断表达式(循环条件)-死循环
while(true){
} 死循环 break
二、do...while循环
while 循环 do做
do while 先做后循环
和while区别 while可能一次都不做 do..while至少做一次
var water=false
while(water){
console.log("喝水了");
}
do{
console.log("我喝水了");
}while(water)
do..whlie 先做后判断 while先判断后做
var 初始值定义
do{
循环体
迭代量
}while(布尔表达式)
1-100的和
var num01=100
var sum01=0
do{
sum01+=num01
num01--
}while(num01>0)
console.log(sum01);
三、for循环
for 循环是一个比较常用的循环
使用方式
for(初始值 可以省略不写;判断条件;迭代量){
循环体
}
for(i=0;i<10;i++){
console.log(i)//0-9
}
var i=0
for(;i<5;i++){
console.log(i);//0-4
}
面试题 下面这种写法是否正确
for(;;){
console.log("你好");
} 死循环 写法正确
var i=0
for(;i<1;){
死循环
}
练习题 10的阶乘
var res=1
for(var i=1;i<=10;i++){
res*=i
}
console.log(res)
时间复杂度:代码执行时长 do..while 和while时间复杂度一致(代码执行时长)
while循环比for块一倍
while时间复杂度低于for循环
循环嵌套 while嵌套
do{
外面执行3次
do{
//里面执行3次
}while()
}while() 总共执行9次
while(){
外面执行5次
while(){
里面执行6次
}
}总共执行30次
for(var i=0;i<10;i++){
for(var i=0;i<10;i++){
console.log("hello");
}
} 不允许的写法 两个变量不能重名
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
console.log("hello");//打印100次
}
}
四、循环嵌套的练习
绘制图形
// *
// ***
// *****
// 分为行和列
for(var row=1;row<=3;row++){
var str='' //col<2*row+1
for(var col=0;col<2*row-1;col++){
str+='*'
}
console.log(str);
}
// 绘制等腰三角形
//4行7列
// * 3空格 1个*
// *** 2空格 3个*
// ***** 1空格 5个*
//******* 0空格 7个*
for(var row=0;row<4;row++){
var str=''
//绘制空格
for(var col=0;col<3-row;col++){
str+=' '
}
//绘制*
for(var col=0;col<2*row+1;col++){
str+='*'
}
console.log(str);
}
console.log("===================")
// 绘制倒等腰三角形
//******* 0空格 7* 0
// ***** 1空格 5* 1
// *** 2空格 3* 2
// * 3空格 1* 3
for(var i=0;i<4;i++){
var str=''
for(var j=0;j<i;j++){
str+=' '
}
for(var j=0;j<7-2*i;j++){
str+='*'
}
console.log(str);
}
//col<row col-- row++ 不能写
console.log("==================")
// * 3空格 1* 0
// *** 2空格 3* 1
// ***** 1空格 5* 2
//******* 0空格 7* 3
// ***** 1空格 5* 4
// *** 2空格 3* 5
// * 3空格 1* 6
//递增方式
for(var row=0;row<7;row++){
var str=''
if(row<3){
for(var col=0;col<3-row;col++){
str+=' '
}
//绘制*
for(var col=0;col<2*row+1;col++){
str+='*'
}
}else{
for(var col=0;col<row-3;col++){
str+=' '
}
for(var col=0;col<7-2*(row-3);col++){
str+='*'
}
}
console.log(str);
}
// 递减方式
// * 3空格 1* 7
// *** 2空格 3* 6
// ***** 1空格 5* 5
//******* 0空格 7* 4
// ***** 1空格 5* 3
// *** 2空格 3* 2
// * 3空格 1* 1
console.log("------递减方式-------");
for(var i=7;i>0;i--){
var str=''
if(i>3){
for(var j=i-4;j>0;j--){
str+=' '
}
for(var j=15-2*i;j>0;j--){
str+='*'
}
}else{
for(var j=4-i;j>0;j--){
str+=' '
}
for(var j=2*i-1;j>0;j--){
str+='*'
}
}
console.log(str);
}
console.log("------九九乘法表-----");
// 绘制乘法口诀表
// \t 制表符自动对齐 相当于tab
//1*1=1 0
//2*1=2 2*2=4 1
for(i=1;i<=9;i++){
var str=''
for(j=1;j<=i;j++){
str+= j + "X" + i + "=" + i*j + "\t"
}
console.log(str);
}
五、break
// break 在switch中跳出整个switch块 for也一样会跳出整个for块
for(var i=0;i<5;i++){
if(i==3){
break//结束这个for循环
}
console.log(i);//0 1 2
}
// 双层嵌套的循环在什么位置就结束当前位置的循环
// break 结束本个循环
for(var i=1;i<3;i++){
for(var j=1;j<3;j++){
if(i==2){
break
}
console.log(i*j); //1 2
}
}
// 复杂循环
for(var i=10;i>=5;i--){
for(var j=i;j<=6;j++){
if(i*j>33){
break
}
console.log(j);//5 6
}
}
// break在外面的循环会结束掉里面包含的循环 但是里面包含的break不会结束外面的循环
for(var i=0;i<5;i++){
if(i==2){
//break//01
continue//0134
}
console.log(i);
}
// continue 接下来的接着走
// continue语句只能用在循环里面
// break可以用在switch里面
// break是跳出本次循环 后面不会再运行 Continue跳过这次循环 后面接着走
// break作用在 在循环嵌套中,只会跳出本次循环 而不影响外层循环

浙公网安备 33010602011771号