经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Java开发笔记(十九)规律变化的for循环
来源:cnblogs  作者:pinlantu  时间:2018/11/6 10:21:21  对本文有异议

前面介绍while循环时,有个名叫year的整型变量频繁出现,并且它是控制循环进出的关键要素。不管哪一种while写法,都存在三处与year有关的操作,分别是“year = 0”、“year<limit”、“year++”。第一个“year = 0”用来给该变量初始赋值,第二个“year<limit”则为是否退出循环的判断条件,第三个“year++”用于该变量的自增操作。这三处语句结合起来,方能实现循环的有限次数处理,而非无限次的运转。换句话说,要想实现一个标准的循环结构,就必须具备上述的三种基本操作。于是Java设计了新的for循环,意图让形态规整的for语句取代结构散乱的while语句。
for循环的书写格式形如“for (A; B; C;) { /* 这里是循环的内部代码 */ }”,其中式子A是初始化语句,在首次进入循环时执行;式子B是循环的判断条件,B成立时继续循环,不成立时退出循环;式子C一般是变量的自增或自减操作,在开始下一次循环之前执行。仍以前述的唤醒游戏为例,使用for语句改写后的循环代码如下所示:

  1. System.out.println("长夜漫漫,无心睡眠");
  2. System.out.println("请给他设定一个睡醒的年限");
  3. Scanner scan = new Scanner(System.in); // 从控制台接收输入文本
  4. /* nextLine方法表示接收一行文字,以回车键结尾 */
  5. int limit = scan.nextInt();
  6. int year;
  7. // for (A; B; C;)的三个式子A、B、C说明如下:
  8. // 式子A在首次进入循环时执行;
  9. // 式子B是循环的判断条件,B成立时继续循环,不成立时退出循环;
  10. // 式子C在开始下一次循环之前执行。注意,每次循环结束之后,先执行式子C,再进行式子B的判断
  11. for (year=0; year<limit; year++) {
  12. System.out.println("已经过去的年份:"+year);
  13. }
  14. System.out.println("他足足睡了这么多年:"+year);

 

从以上代码可见,for循环把三种基本操作都放到了同一行,大大缩减了代码行数。仅仅三行for语句,等价于以下十几行的while循环代码:

  1. year = 0;
  2. if (year<limit) {
  3. while (true) {
  4. System.out.println("已经过去的年份:"+year);
  5. year++;
  6. if (year<limit) {
  7. continue;
  8. } else {
  9. break;
  10. }
  11. }
  12. }

 

不过精简代码的代价是缺乏灵活性,由于for语句的条件判断默认在每次循环开始之前执行,倘若希望在循环内部的指定位置进行是否继续循环的判断,则仍然要把式子B的判断条件挪到循环里面,此时for语句原先给式子B的地方可以留空。于是挪动条件判断之后的for循环代码变成了下面这样:

  1. for (int year=0; ; year++) {
  2. System.out.println("已经过去的年份:"+year);
  3. if (year >= limit) { // 这里判断能否跳出循环
  4. System.out.println("他足足睡了这么多年:"+year);
  5. break; // 跳出循环。即跳到for循环的右花括号之后
  6. } else {
  7. continue; // 继续下一次循环。此时先执行year++,再执行循环内部语句
  8. }
  9. }

 

既然式子B原来的位置允许留空,那么只要处理得当,式子A和式子C的位置也是允许留空的。三个位置同时留空后的for循环代码示例如下:

  1. int year = 0; // 把式子A挪到整个循环的前面
  2. for (; ; ) { // for语句后面的三个位置全部留空
  3. System.out.println("已经过去的年份:"+year);
  4. if (year >= limit) { // 这里判断能否跳出循环
  5. System.out.println("他足足睡了这么多年:"+year);
  6. break; // 跳出循环。即跳到for循环的右花括号之后
  7. } else {
  8. year++; // 把式子C挪到continue之前
  9. continue; // 继续下一次循环。此时先执行year++,再执行循环内部语句
  10. }
  11. }

 

可是一旦紧跟for语句之后的三个位置全都留空,这个for就变得毫无特点了,此时的“for (; ; )”完全等价于“while (true)”。所以说,具体采取哪种循环形式,还得根据实际的业务要求来定夺。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号