Day4:分支结构、循环结构
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1、方法参数:方法内处理逻辑必须的数据,参数仅限方法内部使用!方法外无法访问方法的参数变量,参数的名称自定义! 2、返回值:调用者是否需要获得方法的执行结果 3、调用:方法名调用 4、分支结构: (1)if...else... 1件事 必须二选一 (2)if...else if...[else...]多件事 多选一执行
一、switch-case
1、定义:多条分支根据条件判断,选择执行
2、语法:
switch(表达式){
case 表达式1://表达式的值===表达式1的值
代码段1;
case 表达式n:
代码段n;
default://表达式的值和所有case表达式都不相等
默认代码段;
}
3、运行机制:如果找到与表达式值匹配的case,不但执行当前case下的代码,而且之后所有代码都被触发
4、break:退出当前结构,多个条件共用同一套执行逻辑时,不加break
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> var score=80; switch(true){ case score>=90: console.log('A'); break; case score>=80: console.log('B'); break; case score>=60: console.log('C'); break; default: console.log('D'); } </script> </head> <body> </body> </html> 切记:switch(score)不能写成这样,如果写成这样,它的解释如下: 85传过来,那么score>=80返回true,然后它再和switch里面的score作比较,true===85肯定返回false
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> var choice=parseInt(prompt('请选择服务种类:')); switch(choice){ case 1: concole.log('查询余额'); break; case 2: console.log('取款中'); break; case 3: console.log('转账中'); break; case 4: console.log('退出'); } </script> </head> <body> </body> </html>
二、循环结构
1、定义:程序反复执行同一套代码段,遇到结束条件,结束执行,没有循环结束条件,永远循环执行的叫死循环
2、循环三要素:
(1)循环条件:循环继续执行的条件,一旦循环条件不满足,循环立刻退出!
(2)循环变量:用于循环条件中做判断的变量,循环变量都会向循环退出的趋势变化(不满足循环条件的趋势)
(3)循环体:每次循环要做的事情
3、while:当满足条件时,就继续做...事
语法:
var 循环变量;
while(循环条件){
循环体;
迭代变化循环变量;
}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> //小火车转3圈,自动停止 //循环条件:圈数<3 //循环变量:圈数 每转一圈+1 //循环体:输出“转一圈” var round=0; while(round<3){ if(round==2){ console.log('退出来'); break; } console.log("转一圈"); round++; } console.log("停车"); </script> </head> <body> </body> </html>
break:退出当前循环
while中何时用break:循环条件不满足之前,希望强行退出循环
如何使用break:可以放在任何需要退出循环的位置
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> //程序存个数,然后用户输入数字作对比,然后提示猜大或者猜小了,直到猜对了 /**var n=10; while(true){ var input=parseInt(prompt('你猜:')); if(input>n){ alert('猜大了'); }else if(input<n){ alert('猜小了'); }else{ alert('正确'); break; } }**/ var n=10; var input=-1; while(input!=10){ input=prompt('你猜:'); if(input=='exit'){ break; }else{ input=parseInt(input); } if(input>n){ alert('猜大了'); }else if(input<n){ alert('猜小了'); }else{ alert('正确'); } } </script> </head> <body> </body> </html>
随机数:Math.random():0<=n<1 任意min-max之间取随机数 公式:parseInt(Math.random()*(max-min+1)+min)
4、do-while:先执行一次循环体,再判断是否继续!如果循环条件不满足,循环体至少可以执行1次!
(1)语法:
var 循环变量;
do{
循环体;
迭代变化循环变量;
}while(循环条件);
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> var n=10; do{ var input=prompt('你猜:'); if(input=='exit'){ break; }else{ input=parseInt(input); } if(input>n){ alert('猜大了'); }else if(input<n){ alert('猜小了'); }else{ alert('正确'); } }while(input!=n) </script> </head> <body> </body> </html>
注:变量声明提前:相同作用域内,var...无论出现在什么位置,解析时,优先提取到js开始位置声明!
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> var n=10; //var input; while(input!=10){ var input=prompt('你猜:');//var直接加到这里 if(input=='exit'){ break; }else{ input=parseInt(input); } if(input>n){ alert('猜大了'); }else if(input<n){ alert('猜小了'); }else{ alert('正确'); } } </script> </head> <body> </body> </html>
5、while vs do-while
(1)如果第一次条件就可能不成,也想执行一次,必须用do while
(2)如果第一次条件一定满足,它们等效
6、for循环:完全等效于while循环
(1)循环变量变化规律固定,循环次数已知/固定使用for
(2)语法:
for(声明并初始化循环变量;循环条件;迭代循环变量){
循环体;
}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> //计算1-100的累加值 /**var sum=0; for(var i=1;i<=100;i++){ sum+=i; }**/ //等效于 for(var i=1,sum=0;i<=100;sum+=i++);//for 里面定义的也是全局变量,只要见不到function就不会有新的作用域 console.log(sum); </script> </head> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
for( ; ; ){ console.log('我要读书'); }
7、continue:跳过本轮循环,继续执行下一轮循环
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> var bao=4; for(var box=1;box<=9;box++){ if(box==bao){ continue; } console.log('跳到'+box); } </script> </head> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> //输出5个2000年以后的闰年年份 //循环条件:得到闰年的个数<5 //循环变量:得到的闰年个数,0开始,每次+1 //循环体:判断当前年份,是否闰年,如果是,就输出,并且+1 var count=0; var year=2001; while(count<5){ if((year%4==0&&year%100!=0)||year%400==0){ console.log(year); count++; } year++; } </script> </head> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> //输出5个2000年以后的闰年年份 //循环条件:得到闰年的个数<5 //循环变量:得到的闰年个数,0开始,每次+1 //循环体:判断当前年份,是否闰年,如果是,就输出,并且+1 var count=0; var year=2001; while(count<5){ if((year%4==0&&year%100!=0)||year%400==0){ console.log(year); count++; } if(count>0) year+=4; else year++; } </script> </head> </html>
三、循环嵌套
1、打印9*9乘法表
遇到复杂问题,先用简单办法做最简单的事情,然后从简单办法中找规律
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> /**var str=""; for(var i=1;i<=9;i++){ for(j=1;j<=i;j++){ str+=j+'*'+i+'='+i*j+' '; } str+="<br/>"; } document.write(str);**/ for(var i=1;i<=9;i++){ var str=""; for(j=1;j<=i;j++){ str+=j+'*'+i+'='+i*j+' '; } console.log(str); } </script> </head> </html>
四、课后练习
1、输入成绩,计算平均分
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> //循环条件:input!="-1" //循环变量:input //循环体: //总分+=input; //人数++ //平均=总分/总人数 var sum=0; var count=0; do{ var input=parseInt(prompt("输入成绩:")); if(input==-1){ break; }else{ sum+=input; count++; } }while(true); console.log((sum/count).toFixed(2)); </script> </head> </html>
2、水仙花数(自恋数)找出100-999之间的所有水仙花数
例如:153=1*1*1+5*5*5+3*3*3
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> //循环条件:num<=999 //循环变量:num 从100开始,每次+1 /**循环体 取出百位 取出十位 取出个位 判断num是否等于水仙花数公式 输出num **/ for(var num=100;num<=999;num++){ var hd=parseInt(num/100); var ten=parseInt((num%100)/10); var one=num%10; if(num==hd*hd*hd+ten*ten*ten+one*one*one) console.log(num); } </script> </head> </html>