Java for循环详解

for 语句是应用最广泛、功能最强的一种循环语句。大部分情况下,for 循环可以代替 while 循环、do while 循环。

for 语句是一种在程序执行前就要先判断条件表达式是否为真的循环语句。假如条件表达式的结果为假,那么它的循环语句根本不会执行。for 语句通常使用在知道循环次数的循环中。

for 语句语法格式如下所示。

for(条件表达式1;条件表达式2;条件表达式3) {

语句块;

}

for 循环中 3 个条件表达式的含义如表 1 所示。

表 1 for 循环中 3 个表达式的含义

表达式

形式

功能

举例

条件表达式 1

赋值语句

循环结构的初始部分,为循环变量赋初值

int i=1

条件表达式 2

条件语句

循环结构的循环条件

i>40

条件表达式 3

迭代语句,通常使用

++ 或 -- 运算符

循环结构的迭代部分,通常用来修改循环

变量的值

i++

for 关键字后面括号中的 3 个条件表达式必须用“;”隔开。for 循环中的这 3 部分以及大括号中使循环体必需的 4 个组成部分完美地结合在一起,简单明了。

for 循环语句执行的过程为:首先执行条件表达式 1 进行初始化,然后判断条件表达式 2 的值是否为 true,如果为 true,则执行循环体语句块;否则直接退出循环。最后执行表达式 3,改变循环变量的值,至此完成一次循环。接下来进行下一次循环,直到条件表达式 2 的值为 false,才结束循环,其运行流程如图 1 所示。

图 1  for循环执行流程图

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

for 循环和 while、do while 循环不一样:由于 while、do while 循环的循环迭代语句紧跟着循环体,因此如果循环体不能完全执行,如使用 continue 语句来结束本次循环,则循环迭代语句不会被执行。但 for 循环的循环迭代语句并没有与循环体放在一起,因此不管是否使用 continue 语句来结束本次循环,循环迭代语句一样会获得执行。

与前面循环类似的是,如果循环体只有一行语句,那么循环体的大括号可以省略。

例如,同样是计算 5 的阶乘,使用 for 循环的实现代码如下:

public static void main(String[] args) {

int result = 1;

for (int number = 1; number <= 5; number++) {

result *= number;

}

System.out.print("5 的阶乘结果是:" + result); // 输出"5的阶乘结果是:120"

}

上述语句的含义可以理解为,将 number 变量的值从 1 开始,每次递增 1,直到大于 5 时终止循环。在循环过程中,将 number 的值与当前 result 的值进行相乘。

for 语句中初始化、循环条件以及迭代部分都可以为空语句(但分号不能省略),三者均为空的时候,相当于一个无限循环。下面对这些情况依次进行介绍。

1.条件表达式 1 为空

for 语句中条件表达式 1 的作用可以在程序的其他位置给出,所以当条件表达式 1 为空时,for 语句后面括号内其他条件表达式执行的顺序不变。

例如,使用 for 语句的这种形式计算 1~100 所有奇数的和。

public static void main(String[] args) {

int result = 0;

int number = 1; // 相当于for语句的第1个表达式

for (; number < 101; number++) {

if (number % 2 != 0) // 如果不能整除2,说明是奇数,则进行累加

result += number;

}

System.out.print("100 以内所有奇数和为:" + result);

}

执行后的输出结果如下:

100 以内所有奇数和为:2500

2.条件表达式 2 为空

当 for 语句中条件表达式 2 为空时,将没有循环的终止条件。此时 for 语句会认为条件表达式 2 的值总是为真,循环无限制执行下去。因此,为了使循环达到某种条件时退出,需要在语句块中进行逻辑判断,并使用 break 语句来跳出循环,否则将产生死循环。

同样是计算 1~100 所有奇数的和,使用这种方式的代码如下。

public static void main(String[] args) {

int result = 0;

for (int number = 1;; number++) {

if (number > 100)

break; // 相当于for语句的表达式2,满足时就退出for循环

if (number % 2 != 0) // 如果不能整除2,说明是奇数,则进行累加

result += number;

}

System.out.print("100 以内所有奇数和为:" + result);

}

3.条件表达式 3 为空

当 for 语言中条件表达式 3 为空时,也就没有设置控制变量的表达式,即每次循环之后无法改变变量的值,此时也无法保证循环正常结束。

同样是计算1~100 所有奇数的和,使用这种方式的代码如下:

public static void main(String[] args) {

int result = 0;

for (int number = 1; number < 101;) {

if (number % 2 != 0) // 如果不能整除2,说明是奇数,则进行累加

result += number;

number++; // 相当于for语句的条件表达式3,每次递增1

}

System.out.print("100 以内所有奇数和为:" + result);

}

如果没有循环体语句,number 变量的值为 1,永远小于 101,因此将无法结束循环,形成无限循环。在上面代码中将 number 的递增语句放在 for 循环体内,效果与完整 for 语句功能相同。

4.3 个条件表达式都为空

在 for 循环语句中,无论缺少哪部分条件表达式,都可以在程序的其他位置补充,从而保持 for 循环语句的完整性,使循环正常进行。

当 for 语句中循环体全为空时,即没有循环初值,不判断循环条件,循环变量不增值,此时无条件执行循环体,形成无限循环或者死循环。对于这种情况,读者在使用时应该尽量避免。

例如,计算 1~100 所有奇数的和,使用这种方式的代码如下:

public static void main(String[] args) {

int result = 0;

int number = 1; // 相当于for语句的条件表达式1

for (;;) {

if (number > 100)

break; // 相当于for语句的条件表达式2

if (number % 2 != 0) // 如果不能整除2,说明是奇数,则进行累加

result += number;

number++; // 相当于for语句的条件表达式3

}

System.out.print("100 以内所有奇数和为: " + result);

}

例 1

编写一个 Java 程序,统计某超市上半年的总销售量,要求由用户输入每月的销量。使用 for 循环的实现代码如下。

public static void main(String[] args) {

int sum = 0;

int num = 0;

Scanner sc = new Scanner(System.in);

for (int i = 1; i <= 6; i++) {

System.out.println("请输入第" + i + " 个月的销售数量:");

num = sc.nextInt();

sum += num;

}

System.out.println("上半年的销售总量为:" + sum);

}

在该例中, 声明循环变量 i,控制循环的次数,它被初始化为 1。每执行一次循环,都要对 i 进行判断,看其值是否小于等于 6,条件成立则继续累加成绩,否则退出循环。

每执行完一次循环体,都会对 i 累加 1。如此循环重复,直到 i 的值大于 6 时停止循环。此时退出 for 循环体,执行最下方的语句输出累加的销售总量。

运行程序,执行结果如下所示。

请输入第1 个月的销售数量:

6840

请输入第2 个月的销售数量:

5449

请输入第3 个月的销售数量:

6546

请输入第4 个月的销售数量:

2400

请输入第5 个月的销售数量:

908

请输入第6 个月的销售数量:

8048

上半年的销售总量为:30191

一般选择循环变量时,习惯选择 i、j、k 来作为循环变量。

for、do-while 和 while 的区别

在《Java while和do while循环》中我们学习了 do-while 和 while 循环,这一节我们又学习了 for 循环。关于 do-while 和 while 具体的相同点和不同点在刚刚提到的教程中已经介绍过了,在这里不过多讲解了。下面主要介绍它们的区别,如下表 2 所示。

表 2 for、do-while和while的区别

名称

概念

适用场景

特点

for

根据循环次数限制做多少次重复操作

适合循环次数是已知的操作

初始化的条件可以使用局部变量和外部变量

使用局部变量时,控制执行在 for 结束后会自动释放,提高内存使用效率。

且变量在 for 循环结束后,不能被访问。

先判断,再执行

while

当满足什么条件的时候,才做某种操作

适合循环次数是未知的操作

初始化的条件只能使用外部变量,且变量在 while 循环结束后可以访问

先判断,再执行

do-while

先执行一次,在判断是否满足条件

适合至少执行一次的循环操作

在先需要执行一次的情况下,代码更加简洁。

先执行一次,再判断

例 2

分别用 for、do-while 和 while 求出 1-10 的和。

1)使用for循环

代码如下:

public static void main(String[] args) {

int sum = 0;

for (int i = 1; i < 11; i++) {

sum = sum + i;

}

System.out.println(sum);

}

运行结果为 55。

2)使用 do-while 循环

代码如下:

public static void main(String[] args) {

int sum = 0;

int i = 1;

do {

sum = sum + i;

i++;

} while (i < 11);

System.out.println(sum);

}

运行结果为 55。

3)使用 while 循环

代码如下:

public static void main(String[] args) {

int sum = 0;

int i = 1;

while (i < 11) {

sum = sum + i;

i++;

}

System.out.println(sum);

}

运行结果为 55。

从上边代码可以看出 for 语句明显更加简练,因为知道循环次数。

java for新循环_Java for循环详解相关推荐

  1. java配置文件实现方式_java相关:详解Spring加载Properties配置文件的四种方式

    java相关:详解Spring加载Properties配置文件的四种方式 发布于 2020-4-29| 复制链接 摘记: 一.通过 context:property-placeholder 标签实现配 ...

  2. java反射源码_java反射技术详解附源码

    在学校学习Java时,由于学的不扎实,也没经历过太多实战项目,所以很多重要的知识点瞟一眼就过去了,比如现在要讲的反射,当时直接就忽略掉了,可现在发现很多地方需要反射,不得不重新学习一下,上学欠了太多债 ...

  3. java获取枚举索引_Java枚举使用详解

    在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数 ...

  4. 基于java洗浴中心管理系统_Java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  5. java retry怎么用_java retry使用详解

    在说明前先来看一点代码: public void testRequest() { // retry:// 1(行2) for (int i = 0; i < 10; i++) { retry:/ ...

  6. java的scanner用法_Java Scanner用法详解

    一.Scanner类简介 Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序.它是以前的StringTokenizer和Matcher类之间的某种结合.由于 ...

  7. java lock代码写法_java Lock接口详解及实例代码

    java  lock接口 java.util.concurrent.locks 接口lock public interface loce loce实现提供了比使用synchronized方法和语句可获 ...

  8. java 获取 网卡名称_Java获取网卡信息详解

    InterfaceAddress 类表示一个由名称和分配给此接口的 IP 地址列表组成的网络接口.它用于标识加入多播组的本地接口. 接口通常是按名称(如 "le0")区分的. Ne ...

  9. java程序日期转换_Java 日期转换详解及实例代码

    Java 日期转换 涉及的核心类:Date类.SimpleDateFormat类.Calendar类 一. Date型与long型 Date型转换为long型 Date date = new Date ...

  10. java四舍五入自己写_java提高篇-----详解java的四舍五入与保留位

    转载:http://blog.csdn.net/chenssy/article/details/12719811 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么 ...

最新文章

  1. Codeforces Round #433(Div. 2) D. Jury Meeting(贪心)
  2. rds基于什么开发_java rds
  3. github ssh密钥_如何使用SSH密钥在一台机器上管理多个GitHub帐户
  4. OpenGL绘制旋转茶壶
  5. 结对-结对编项目作业名称-开发环境搭建过程
  6. 计算指定人数班级的班级平均成绩(计数器控制控制的循环)
  7. html5 Canvas 绘制基本图形 从直线图形到使用路径 - 直线、矩形、路径、多边形、复杂组合图形
  8. Android Testing学习02 HelloTesting 项目建立与执行
  9. 升级 Xcode 4.3 后找不到 xcodebuild 的解决方法
  10. Sentinel卫星数据
  11. APP推广工具(总结)
  12. Email-FTP-RTSP协议实践研究
  13. 大数据毕设选题 - 深度学习植物识别系统(cnn opencv python)
  14. [大数据文章之其四] 概率数据结构简介
  15. 100天精通Andriod逆向——第2天:Android基础知识和jadx的使用
  16. 顺序表2:顺序表的逆置
  17. 【供应链架构day9】美团配送系统架构的演进之路:从MVP到规模化
  18. 【JavaScript】select 事件监听及选中
  19. Using sensor messages with tf(Using Stamped datatypes with tf::MessageFilter)
  20. 东游亲友房,从0到1搭建一个亲友房

热门文章

  1. mysql列转行、行转列
  2. 【哔哩哔哩播放器】2020最新版高仿哔哩哔哩视频播放器网站源码
  3. golang/Java实现求100以内的所有素(质)数和九九乘法表
  4. 存储阵列的LUN配置
  5. 用于类不平衡数据的随机森林分位数分类器
  6. woff 404 woff2 404
  7. 计算机物理地址win8,Win8系统怎么查看电脑物理地址(两种方法)
  8. 关于这次KPL春季决赛的感悟
  9. 0723-0802 C语言笔记(李明杰前8天)
  10. [electron] 01 一分钟web应用秒变客户端软件(附原理及其他各种打包方案)