十八、break和continue

十八、breakcontinue

18.1 break

表示立即终止循环

1
2
3
4
5
6
7
8
9
10
<script>
for(var i = 1 ; i <= 10 ; i++){
if(i == 3){
break;
}
console.log(i);
}
</script>

// 结果为: 1 2

遇见break语句,会立即结束整个循环,做循环后面的语句去了。当前这次遍历,没有做完的语句也不做了

1
2
3
4
5
6
7
8
9
10
<script>
for(var i = 1 ; i <= 10 ; i++){
console.log(i);
if(i == 3){
break;
}
}
</script>

// 结果为: 1 2 3

break天生打断最内层循环的

1
2
3
4
5
6
7
8
9
10
<script>
for(var i = 0 ; i < 3 ; i++){
for(var j = 0 ; j < 3 ; j++){
if(i < j){
break;
}
console.log(i , j) // console.log()中 ,逗号表示隔开
}
}
</script>

UCk5fP.png

break这个语句,产生了一个新的算法思维,后置验证i的值。

1
2
3
for(var i = 0 ; i < 10 ; i++){
}
console.log(i); // 10

如果这个变量i成功执行了所有次数的循环,出了循环之后,必然值是10

如果出了循环之后,值不是10,说明这个i不是自己出来的,而是被break赶出来的的

18.1.1 算法题目1:验证字符串都是牛,没有别的字

比如,验证“牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛午牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛”中是不是都是牛,没有午

  • 字符串的长度叫做lengthlength是属性,所以没有函数,没有括号
1
“我爱你”.length             // 3
  • 得到字符串某位那个字,用charAt()0开始数。charAt()是函数,所以有括号

UCAJht.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script>
var str = "牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛午牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛";
// 遍历每个字,如果不是牛字,立即结束循环
for(var i = 0 ; i < str.length ; i++){
if(str.charAt(i) !== "牛"){
break;
}
}
// 看这个i是不是等于str.length,如果等于,就是说i是自然出来的
// 如果不等于就表示是被干出来的
if(i === str.length){
alert("字符串都是牛");
}else{
alert("字符串中有叛徒,第" + i + "位是叛徒");
}
</script>

UCAyhq.png

18.1.2 算法题目2:验证200~300之间有没有水仙花数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script>
// 穷举法
for(var i = 100 ; i <= 999 ; i++){
// 拆位
var baiwei = ~~(i / 100);
var shiwei = ~~(i / 10) % 10;
var gewei = i % 10;
// 看是否符合水仙花数的定义
if(Math.pow(baiwei, 3) + Math.pow(shiwei, 3) + Math.pow(gewei, 3) == i){
break;
}
}

// 看i怎么出来的
if(i == 1000){
alert("没有水仙花数")
}else{
alert("有!")
}
</script>

UCAH9x.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script>
// 穷举法
for(var i = 200 ; i <= 300 ; i++){
// 拆位
var baiwei = ~~(i / 100);
var shiwei = ~~(i / 10) % 10;
var gewei = i % 10;
// 看是否符合水仙花数的定义
if(Math.pow(baiwei, 3) + Math.pow(shiwei, 3) + Math.pow(gewei, 3) == i){
break;
}
}

// 看i怎么出来的
if(i == 301){
alert("没有水仙花数")
}else{
alert("有!")
}
</script>

UCEFv8.png

18.1.3 算法题目3:寻找1~100的质数

之前用的是count法,比如验证48 是不是质数,我们发现1 2 3 4 6 8 12 16 24 48 共10个数字都是它的约数,即i为48时,因为count是10 ,而不是2 ,所以48 不是质数

但是为何要统计48有几个约数呢?只要2~47有数字能整除,就是说明不是质数了

改良算法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
for(var i = 2 ; i <= 100 ; i++){
for(var j = 2 ; j < i ; j++){
if(i % j == 0){
break; //一旦 i能被>=2的数字整除时,说明i不是质数
}
}
// 看j怎么出循环的。如果j和i相等,说明i是自然出循环的,是质数
// 如果j和i不相等,说明是被break赶出来的,就不输出
if(j == i){
console.log(i);
}
}
</script>

UCEgIA.png

18.2 continue

continue没啥用。为啥?因为continue这个语句,已经被人诟病,影响程序可读性,公司不让用。

continue表示进入下一次迭代。本次迭代的后续语句不做了。

1
2
3
4
5
6
7
8
<script>
for(var i = 1 ; i <= 10 ; i++){
if(i == 3){
continue; // 继续
}
console.log(i);
}
</script>

没有3 ,到3 那次迭代的时候,遇见了continue语句,立即进入下一次迭代,就是4了

UCV9Z4.png

事实上,不想数出3,直接写:

1
2
3
4
5
6
7
<script>
for(var i = 1 ; i <= 10 ; i++){
if(i != 3){
console.log(i);
}
}
</script>

18.3 给循环命名

给循环命名,这个写法工作中完全不让用!!!

1
2
3
4
5
waiceng :for(var i = 1 ; i < 10 ; i++){
for(var j = 1 ; j <=10 ; j++){
break waiceng;
}
}
点击查看

本文标题:十八、break和continue

文章作者:Mango

发布时间:2020年07月08日 - 21:51:39

最后更新:2020年07月08日 - 22:35:39

原始链接:https://mango185.github.io/post/7a0cd655.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------