文档章节

For,break以及continue介绍

此鱼不得水
 此鱼不得水
发布于 2015/07/04 02:08
字数 1575
阅读 17
收藏 0

我们知道For循环在Java中经常被使用,下面我们来看一下这个for的一些细节运行。

例子一:

for(int i=10;i>0;i--){
  System.out.print(" "+i);
}

输出如下: 10 9 8 7 6 5 4 3 2 1

我们一步一步跟踪一下这个for循环:

1:初始化i=10(在这个for循环之中只会执行一次,只在循环开始时候执行一次)

2:判断(i>0)是否成立,显然10>0成立,执行循环体,再次就是打印一下i的值。

3:执行i--操作,执行完之后i=9;

4:再次判断i>0是否成立,成立的话继续执行循环体,都则跳出循环。这里i=1>0显然成立,于是继续执行循环。。。。。

。。。。。。。依次输出9,8,7,6,5,4,3,2,1

5:当输出完1之后可以知道此时i=1,然后执行i--操作,减完之后i=0。

6:再次判断i>0是否成立,显然i=0>0不成了,于是跳出循环。至此for循环结束。

这里我们可以看一下一共执行了20次判断,而循环体执行了10次,i--也执行了10次,所以在这种简单情况下循环体执行的次数可以设为n,则判断的的次数为2n次。

例子二:

for(int i=10;i-->0;){
    System.out.print(" "+i);
}

输出如下:  9 8 7 6 5 4 3 2 1 0

在这里我们进行的与例子一稍微有点差别,这里的差距体现在i-->0上,下面让我仔细对比:

1:初始化i=10(在这个for循环之中只会执行一次,只在循环开始时候执行一次)

2:执行i--操作,执行完之后i=10;

3:判断(i>0)是否成立,显然9>0成立,执行循环体,打印一下i的值(9)。(2,3步其实是统一的,再次拆开只是为了方便大家理解)

4:再次执行i--操作,执行完之后i=9

5:判断(i>0)是否成立,显然9>0成立,执行循环体,打印一下i的值(8)。.。。。。。。。

依次打印的结果为:9,8,7,6,5,4,3,2,1,

6:然后我们注意这一次了,因为是i-->0所以虽然这时候i--执行了,但是判断的时候这里的i=1>0扔成立。

7:在执行输出的时候因为上面执行过了i--操作了所以这里输出的是0而不是1;

有兴趣的可以去测试--i>0时候的效果

这里我们可以看一下一共执行了11次判断,而循环体执行了10次,i--也执行了11次,所以在这种简单情况下循环体执行的次数可以设为n,则判断的的次数为n+1次。

在这里我测试使用i=1000分别测试两次执行的时间,前者的平均执行时间是85ms,后者的平均执行时间70ms,而我将循环次数上升到1000次时候前者的平均时间是621ms,后者的平均时间是844ms。粗略统计情况可知道在循环次数多的情况下使用前者的情况下效率会更多一点。所以笔者个人建议使用前者。


例子三:

int i = 0;
          outer: 
          for(; true ;) { 
               inner: 
               for(; i < 10; i++) {
                    System.out.println("i = " + i);
                    if(i == 2) {
                        System.out.println("continue");
                        continue;
                    }
                    if(i == 3) {
                        System.out.println("break");
                        i++;        
                        break;
                    }
                    if(i == 7) {
                        System.out.println("continue outer");
                        i++; 
                        continue outer;
                    }
                    if(i == 8) {
                        System.out.println("break outer");
                        break outer;
                    }
                    for(int k = 0; k < 5; k++) {
                        if(k == 3) {
                             System.out.println("continue inner");
                             continue inner;
                        }
                    }
               }

     }
}

输出结果如下:

i = 0
continue inner
i = 1
continue inner
i = 2
continue
i = 3
break
i = 4
continue inner
i = 5
continue inner
i = 6
continue inner
i = 7
continue outer
i = 8
break outer

现在我们一步一步看看这个循环,相信如果耐心看完之后你对break和continue的理解会更充分。

1:首先是i的值默认为0,温馨提示(这里的i及时不赋值的话系统也会自动赋值为0的)。

2:进入了outer循环,之类outer:后面不能加任何其他字符

3:进入for循环了,因为已经有i的初始值,所for循环以第一项可以省略啦.

4:判断0<10成立,只是开始执行喽。首先输出i=10,然后执行下面的for循环输出"continue inner"

5:continue inner--------返回inner循环体开始的部分这时候及时continue之后还有语句的话也会结束的。

插插插:continue之后不加任何字符的话就是说本次for循环执行结束而已,而不会调到外面的循环体之中

但是加了inner之后就明确指定跳转到了inner循环的部分了。

6:进入inner部分,第一步进入for循环然后输出i=1,接下来跟上面步骤一样,重复一次。

7:再次进入inner部分,第一步再次进入for循环,输出i=2.

计入第一个if循环,输出continue字符串,然后执行continue。注意这里的continue与上面的区别。

8:执行完7之后就直接再次调到for循环开头了,输出i=3.

9:进入第二个if循环,输出“break”.然后执行break语句

10:执行完break之后直接结束了本次的for循环语句,及时这个时候i=3<10仍然成立,但是这就是break的作用了。

11:跳转到最大的for循环:for(; true ;),然后依次再次进入inner,小for循环。。。duang,duang,duang。。。。

12:执行小for循环输i=7,执行第三个if判断,输出continue outer并且i++,注意之类如果没有i++的话将会进入无线循环哦。

13:由于执行了continue outer操作所以其实这个跟上一次的break回到的位置是一样的,都是外层的out块.

14:依次执行,输出i=8;进入第四个for循环,输出“break outer”,执行break outer(跳出最外层的outer块).整个大块结束。

综上简单更了一下for循环里面一些基本知识,之后会陆续更新基础的知识,如果有读者想建议笔者更新其他内容了可以联系笔者哦:425804471@qq.com


© 著作权归作者所有

共有 人打赏支持
此鱼不得水
粉丝 2
博文 41
码字总数 23991
作品 0
洛阳
私信 提问
《Java从小白到大牛》之第7章 控制语句

《Java从小白到大牛》纸质版已经上架了!!! 程序设计中的控制语句有三种,即顺序、分支和循环语句。Java程序通过控制语句来管理程序流,完成一定的任务。程序流是由若干个语句组成的,语句...

tony关东升
2018/06/25
0
0
java中标签的作用

在java中,标签起作用 的唯一的地方刚好是在迭代语句之前。 “刚好之前”的意思表明,在标签和迭代之间置入任何语句都不好。 而在迭代之前设置标签的唯一理由是:我们希望在其中嵌套另一个迭...

扎西多顿
2015/10/08
216
0
javascript中return;return false,return true 总结。

javascript中return;return false,return true 总结。 一、返回控制与函数结果,语法为:return 表达式;语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二、返回控制,无函...

蜗牛奔跑
2016/03/01
30
0
review what i studied `date` - 2017-4-15

python 获取命令的返回值以及命令执行的状态 [root@xuhui-1 foundation]# cat command.py !/bin/env python *conding:UTF-8* import commandsstatus,output=commands.getstatusoutput('ls')......

1498472791
2018/06/26
0
0
C Primer Plus 第7章 C控制语句:分支和跳转 本章概要

在本章中您将学习到以下内容: *关键字 if / else / switch / continue / break / case / default / goto *运算符 && || ?: *函数: getchar() / putchar() 以及ctype.h系列 *怎样使用if和i...

idreamo
2016/06/12
40
0

没有更多内容

加载失败,请刷新页面

加载更多

总结:线程间频繁切换为什么耗费资源?

因为线程切换的时候,CPU需要将此线程的所有执行状态保存起来,如线程编号,执行到的位置等,然后再去执行其它线程。

浮躁的码农
27分钟前
0
0
PHP版本高于5.5时,curl文件上传必须使用CurlFile对象

坑了我一天,之前@的方法各种上传不成功文件。都怀疑服务端有bug了。

叫我哀木涕
28分钟前
1
0
js算法总结

数列求和 等差数列求和 function sum(a0,d,n){//a0->首项,d->公差,n->项数//(首项+末项)*项数/2return (a1+(a1+d*n))*n/2;} 等比数列求和 function sum(a0,q,n){//a0->首项,q->公......

祖达
53分钟前
2
0
小白?转型?毕业生?外行学习快速入行大数据开发指南

这篇文章中,本文将针对三种不同的、想要进入数据科学领域的人群,给出自己的经验,帮助他们迅速有效入行。 虽然没有适合每个人的万能解决方案,但这三类建议值得想转行的你一看。 第1类:新...

董黎明
今天
2
0
好文 | MySQL 索引B+树原理,以及建索引的几大原则

MySQL事实上使用不同的存储引擎也是有很大区别的,下面猿友们可以了解一下。 一、存储引擎的比较 注:上面提到的B树索引并没有指出是B-Tree和B+Tree索引,但是B-树和B+树的定义是有区别的。 ...

Java爬坑之路
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部