循环语句可以在满足循环条件的情况下,反复执行某一点代码,这段被重复执行的代码被称为循环体,当反复执行这个循环体时,需要在合适的时候把循环条件该为假,从而结束循环,否则循环将一直执行下去,形成死循环。循环语句可能包含如下4个部分:

1.初始化语句:一个或多条语句,这些语句用于完成一些初始化工作,初始化语句在循环开始之前执行。

2.循环条件:这是一个boolean表达式,这个表达式能决定是否执行循环体。

3.循环体:这个部分是循环的主体,如果循环条件允许,这个代码块将被重复执行。如果这个代码块只有一行语句,则这个代码块的花括号是可以省略的。

4.迭代语句:这个部分在一次循环体执行结束后,对循环条件求值之前执行,通常用于控制循环条件中的变量,使得循环在合适的时候结束。

上面4个部分只是一般性的分类,并不是每个循环中都非常清晰地分出了这个4个部分。

1  for循环

for循环是相对简洁的循环语句,大部分情况下,for循环可以替代while循环、do-while循环。for循环的完整语法格式如下:

for(初始化语句;循环条件;迭代语句){

循环体;

}

程序执行for循环时,先执行循环的初始化语句,初始化语句只在循环开始之前执行一次。每次执行循环体之前,先计算循环条件的值,如果循环条件返回true,则执行循环体,循环体执行结束后执行循环迭代语句。因此,对于for循环而言,循环条件总比循环体要多执行一次,因为最后一次执行循环条件返回false,将不再执行循环体。

值得注意的是,for循环的循环迭代语句没有与循环体放在一起,因此即使在执行循环体时遇到continue局域结束本次循环,循环迭代语句也一样会得到执行。

如果循环体只有一行语句,那么循环体的花括号可以省略:

for(初始化语句;循环条件;迭代语句) 循环体;

例:下面的程序演示了for循环的执行流程:

public class ForDemo{

public static void main(String[] args){

for(int i = 0;i < 10; i++){

System.out.println("i的值为:" + i);

}

}

}

编译并运行这个程序,控制台将显示如图10所示的信息。

图10  ForDemo运行结果

在上面的循环语句中,for循环的初始化语句只有一个,循环条件也只是一个简单的boolean表达式,实际上,for循环允许同时制定多个初始化语句,循环条件也可以是一个包含逻辑运算符的表达式,如下所示:

public class ForDemo{

public static void main(String[] args){

for(int b = 0,s = 0,p = 0;b < 10 && s< 4 && p < 10;p++){

System.out.println(b++);

System.out.println(++s + p);

}

}

}

上面的代码中初始化变量有三个,但是只能有一个声明语句,因此如果需要在初始化表达式中声明多个变量,那么这些变量应该具有相同的数据类型。

另外,for循环还有一些有趣的变体,是通过不对循环的某些部分进行定义来实现的。在Java中,for循环的所有或部分初始化,条件或迭代部分都可以为空,如下所示:

public class ForDemo{

public static void main(String[] args){

int i;

for(i = 0; i < 10;){

System.out.println("i的值为:" + i);

i++;

}

}

}

编译并运行这个程序,控制台将显示如如11所示的信息。

图11  修改后的ForDemo运行结果

这里,for循环没有迭代表达式,而把循环控制变量i的增加放在了循环体的内部。这就意味着每次循环时都要测试i是否等于10,除此之外没有进一步的动作。当然,因为i的增加在循环体内部,所以循环还可以正常进行。

下面在看for循环的另一个变体,在下面的例子中,for循环的初始化部分也被移出了for循环:

public class ForDemo{

public static void main(String[] args){

int i = 0;

for( ; i < 10; ){

System.out.println("i的值为:" + i);

i++;

}

}

}

重新编译并运行这个程序,控制台将显示如图12所示的信息。

在此版本中,在循环开始前就把i初始化了,没有把它作为for循环的一部分。一般情况下都是把循环控制变量的初始化放在for循环内部,但是当初始值是通过某个复杂过程得到的,而又不方便把这一过程放在for语句中时,可以把初始化放在循环之外。

图12  再次修改后的ForDemo运行结果

for循环还有另外一种变体就是将循环的条件表达式设为空,可以生成无限循环,即永远不会停止的循环。例如下面的代码就是Java程序创建无限循环的常用方法:

for( ; ; ){

//...

}

该循环将永远运行下去,尽管有许多程序设计任务,如操作系统命令处理器,需要无限循环,但是多数“无限循环”都是具有特殊终止条件的循环。

在Java中,for循环(或其他循环)可以没有循环体,因为空语句在语法上是有效的。没有循环体的循环十分有用。例如,下面的程序就是用了没有循环体的循环,计算从1至5的数之和:

public class ForDemo2{

public static void main(String[] args){

int sum = 0;

for(int i = 1; i <= 5; sum += i++);

System.out.println("1至5的和为:" + n);

}

}

编译并运行这个程序,控制台将显示如图13所示的信息。

注意,整个求和过程是在for语句中完成的,不需要循环体。这里要特别注意迭代表达式:

sum += i++;

图13  ForDemo2运行结果

IT兄弟连 Java语法教程 流程控制语句 循环结构语句1的更多相关文章

  1. IT兄弟连 Java语法教程 流程控制语句 循环结构语句4

    do-while循环 Java还有一种循环是do-while.与for.while这些在循环顶部判断条件表达式的语句不同,do-while是在循环底部进行条件表达式的检查.这意味着do-while循环 ...

  2. IT兄弟连 Java语法教程 流程控制语句 循环结构语句3

    while循环 Java中的另外一种循环是while循环.while循环的语法格式如下: while(条件表达式){ 循环体; } 其中条件表达式定义了控制循环的条件,可以使任何有效的boolean表 ...

  3. IT兄弟连 Java语法教程 流程控制语句 循环结构语句2

    双重for循环 如果把一个循环放在另一个循环体中,那么就可以形成嵌套循环,也就是双重for循环,当然嵌套循环也可以是for循环嵌套while循环,也可以是while循环嵌套while循环……,即各种类 ...

  4. IT兄弟连 Java语法教程 流程控制语句 分支结构语句1

    不论哪一种编程语言,都会提供两种基本的流程控制结构:分支结构和循环结构.其中分支结构用于实现根据条件来选择性地执行某段代码,循环结构则用于实现根据循环条件重复执行某段代码.Java同样提供了这两种流程 ...

  5. IT兄弟连 Java语法教程 流程控制语句 分支结构语句5

    5  switch-case条件语句 Java中的第二种分支控制语句时switch语句,switch语句提供了多路支持,因此可以使程序在多个选项中进行选择.尽管一系列嵌套if语句可以执行多路测试,然而 ...

  6. IT兄弟连 Java语法教程 流程控制语句 分支结构语句3

    3  if-else if-else条件语句 if-else if-else的完整形式如下: if(判断条件A){ A语句块(判断条件A的值为true,执行) }else if(判断条件B){ B语句 ...

  7. IT兄弟连 Java语法教程 流程控制语句 分支结构语句4

    4  嵌套if-else条件语句 嵌套if语句是作为另一个if或else语句的目标的if语句.嵌套if语句在程序设计中非常普遍.Java中,关于嵌套if语句需要记住的是,else语句总是和同一代码块中 ...

  8. IT兄弟连 Java语法教程 流程控制语句 分支结构语句2

    2  if-else条件语句 if-else语句的完整形式如下: if(判断条件){ A代码块(判断条件的值为true,执行) }else{ B代码块(判断条件的值为false,执行) } 当然,如果 ...

  9. IT兄弟连 Java语法教程 流程控制语句 控制循环结构1

    Java语言没有提供goto语句来控制程序的跳转,这种做法提高了程序流程控制的可读性,但降低了程序流程控制的灵活性.为了弥补这种不足,Java提供了continue和break来控制循环结构.除此之外 ...

随机推荐

  1. [MySQL] mysql中bitmap的简单运用

    bitmap就是在一个二进制的数据中,每一个位代表一定的含义,这样最终只需要存一个整型数据,就可以解释出多个含义.业务中有一个字段专门用来存储用户对某些功能的开启和关闭,如果是传统的思维,肯定是建一个 ...

  2. Python3 中的Number

    Python3 支持 int.float.bool.complex(复数). 在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long. 像大多数语言一样,数 ...

  3. Python如何动态的为对象添加方法或属性,__slots__用法

    代码示例如下: import types    #使用MethodType方法需要导入包 class test(object):  #定义 一个test类,包含name属性和f()方法 def __i ...

  4. CF1062F Upgrading Cities

    题意 由于这是个\(DAG\),我们考虑拓朴排序,求某个点能到的和能到它的点,这是两个问题,我们可以正反两边拓朴排序,这样就只用考虑它能到的点了 设\(f[x]\)表示\(x\)能到的点数\(+\)能 ...

  5. python爬取图片

    1.导入需要的模块requests,BeautifulSoup,os(用于文件读写). 2.创建一个类,并初始化.   1 2 3 4 5 6 7 8 class BeautifulPicture: ...

  6. 使用ES6新特性async await进行异步处理

    我们往往在项目中会遇到这样的业务需求,就是首先先进行一个ajax请求,然后再进行下一个ajax请求,而下一个请求需要使用上一个请求得到的数据,请求少了还好说,如果多了,就要一层一层的嵌套,就好像有点c ...

  7. JS如何判断鼠标滚轮向上还是向下滚动

    前几天偶然看到某前端群有人在问:JS如何判断鼠标滚轮向上还是向下滚动? 我想了想,有点蒙蔽,心想难道不是用scrollTop来判断吗? 但我不确定,也出于好奇心,于是开始了一番探索 思路:通过even ...

  8. Spring Cloud Gateway、并发编程等等

    2019年 JUC线程池服务ExecutorService接口实现源码分析 Github Page:http://www.throwable.club/2019/07/27/java-concurre ...

  9. (十六)c#Winform自定义控件-文本框哪里去了?-HZHControls

    官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...

  10. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之四:组织单位服务安装账号设置

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...