写在前面的话
- 本文主要简单归纳了JavaScript中循环结构的用法,并列举了一个经典的猴子分桃案例,本文如有不足之处,请多包涵,提出指正,谢谢!
for循环
for(表达式1 ;表达式2;表达式3){}
注意:
- 3个表达式的都可以省略。
- 对表达式1和表达式3省略,对for循环没有任何影响,只是少执行了代码而已。
- 如果表达式2省略,表示此处为true,那么这个循环就是死循环。
- 如果第一次检查表达式2的时候就是false,则循环体内的代码可能一次也不执行。
break
- break:用在循环中,碰到break则直接结束循环。
- 可以提前结束循环
for循环的一些细节
- 1、for循环中的三个表达式都可以省略
- 2、表达式1和表达式3省略,就代表了一个空语句
- 3、表达式2省略,表示的是true
while循环
- while(判断条件){//循环体}
- 注意:while中的判断条件不能省略。
for和while
- 共同点:有可能这个循环一次都不执行。
- 1、for和while完全可以进行互相替换。
- 2、for:更加合适去使用那些循环的次数固定的情况。
- 3、while循环更加适合在那些循环次数不确定的情况。(break)
do{}while();循环
- do{//循环体}while(循环条件);循环
- 至少执行一次。
continue
- 提前结束本轮循环。
猴子分桃问题
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<!--猴子分桃:海 滩上有一堆桃子,五只猴子来分。
第一只猴子把这堆桃子凭据分为五份,多了一个, 这只猴子把多的一个扔入海中,
拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,
它同样把多的一个扔入海中,拿走了一份,
第三、第四、第五只猴子都是这样做的,
问海滩上原来最少有多少个桃子?-->
<body>
<script type="text/javascript">
var pitches = 6;
var monkeys = 5;
//var flag = false; //旗帜法的旗帜
//标号/标记
flag:
for(; true; pitches += 5) { //根据桃子和猴子的数量,可以推断桃子的末位是1或6,所以可以直接加5。
var temp = pitches; //保证外层循环开始从6加,保证桃子的总数量不变。
for(var monkey = 1; monkey <= monkeys; monkey++) {
if(temp % 5 === 1 && temp >= 6) { //每只猴子进入后按照规则进行分配,并且保证桃子数量要大于6才能分配
temp = ((temp - 1) / 5 * 4); //下一只猴子开始分桃的数量
if(monkey === 5) { //当第五只猴子可以按规则分完桃子的时候说明桃子数量达到了能够按规则分配的最小的数量
/*flag = true;
break;*/ //跳出外层循环利用旗帜法,然后在外层循环做判断
break flag;
}
} else {
break; //桃子数量不能满足分配规则就直接跳出内层循环,继续增大桃子数量
}
}
/*if(flag){
break;
}*/ //旗帜法的判断
}
document.write("桃子原来的数量:" + pitches);
</script>
</body>
</html>