Day4:分支结构、循环结构
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
<!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
<!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(循环条件){
循环体;
迭代变化循环变量;
}
<!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:可以放在任何需要退出循环的位置
<!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(循环条件);
<!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开始位置声明!
<!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(声明并初始化循环变量;循环条件;迭代循环变量){
循环体;
}
<!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>
for( ; ; ){ console.log('我要读书'); }
7、continue:跳过本轮循环,继续执行下一轮循环
<!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>
<!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>
<!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乘法表
遇到复杂问题,先用简单办法做最简单的事情,然后从简单办法中找规律
<!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、输入成绩,计算平均分
<!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
<!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>
浙公网安备 33010602011771号