for循环语句是Java语言提供的功能更强,使用更广泛的一种循环语句。Java语言的for循环语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环条件的情况,它完全可以代替while循环。
for循环的一般语法为:
for(表达式1; 表达式2; 表达式3;)
{
语句;
}语法说明如下:
■ 表达式1:通常用来给循环变量赋初值,一般是赋值表达式,也允许在for语句外给循环变量赋初值,此时可以省略该表达式;
■ 表达式2:通常是循环条件,一般为关系表达式或逻辑表达式;
■ 表达式3: 通常可用来修改循环变量的值,一般是赋值语句。
for循环中的这三部分必须用分号隔开,组成循环体的语句可以是单条语句或多条语句。
一般语法中的“语句”即为循环体语句。for语句的语义是:
(1)首先计算表达式1的值,通常为循环变量赋初值;
(2)再计算表达式2的值,即判断循环条件是否为真,若值为真则执行循环体一次,否则跳出循环;
(3)再计算表达式3的值,这里通常写更新循环变量的赋值表达式,然后转回第二步重复执行。
在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次。循环体可能执行多次,也可能一次都不执行。
案例1:使用for循环求数的阶乘。
在PbaseUnit10项目unit包下创建FactorialSample类。代码如下:
/**
* @Title: FactorialSample.java
* @Package unit
* @Description: Java基础知识课程案例
* @author 编程训练营
* @date
* @version V1.0
*/
package unit;
import java.util.Scanner;
/**
* @ClassName: FactorialSample
* @Description: 流程控制(for循环结构)案例1
* @author 编程训练营
* @date
*
*/
public class FactorialSample {
/**
* @Title: main
* @Description:Java程序入口main方法
* @param @param args 参数
*
* @return void 返回类型 @throws
*/
public static void main(String[] args) {
int number, count;
int factorial = 1;
Scanner sc = new Scanner(System.in);
System.out.println("请输入任意一个正整数");
number = sc.nextInt();
for (count = 1; count <= number; count++) {
factorial = factorial * count;
}
System.out.printf("%d的阶乘 = %d", number, factorial);
}
}程序结构分析
程序功能主要是演示for循环语句的使用。
程序声明了3个int类型的变量,number、count、factorial。分别用于存储输入的整数、循环变量的值、阶乘值。for循环中表达式count=1为变量赋初值,表达式count<=number作为循环条件用来测试是否继续执行循环,表达式count++用来修改循环变量的值。
程序执行结果如下图所示:

for语句中的三个表达式都可以是逗号表达式,逗号表达式就是通过“逗号”隔开的多个表达式组成的表达式,逗号表达式从左往右计算。
案例2:使用for循环输出加法表。
在PbaseUnit10项目unit包下创建AdditionSample类。代码如下:
/**
* @Title: AdditionSample.java
* @Package unit
* @Description:Java基础知识课程案例
* @author 编程训练营
* @date
* @version V1.0
*/
package unit;
import java.util.Scanner;
/**
* @ClassName: AdditionSample
* @Description: 流程控制(for循环结构)案例2
* @author 编程训练营
* @date
*
*/
public class AdditionSample {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
*
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
int i, j, max;
Scanner sc = new Scanner(System.in);
System.out.println("请输入任意一个数值");
System.out.println("根据这个值可以输出以下加法表");
max = sc.nextInt();
for (i = 0, j = max; i <= max; i++, j--) {
System.out.printf("\n %d + %d = %d", i, j, i + j);
}
}
}程序结构分析
程序功能主要是演示for循环中逗号表达式的使用。
程序在for循环中,表达式1为逗号表达式,该表达式为循环变量i和j赋初值,执行此表达式后,i被赋值为0,j被赋予max中的当前值;表达式3也是一个逗号表达式,每次循环后,i自加1,j自减1。
程序执行结果如下图所示:

前面已讨论,for循环中有三个表达式,for循环中的这三个表达式都可以省略,但要注意分号分割符合不能省略,下面分别讨论for循环中省略部分或者全部表达式的情况。
(1)省略表达式1
for循环语句中表达式1可以省略不写,此时,循环变量应在循环语句之外赋值,例如如下语句:
int i = 0;
for( ; i < 10; i++ )
{
System.out.printf("\n %d=", i*2)
}程序输出20以内的偶数,int i = 0对循环变量进行赋值,因为循环变量i已经被赋值,此时循环语句可以省略表达式1。
(2)省略表达式2
for循环语句中的表达式2,在一定条件下也可以省略, 表达式2主要用于循环条件的判断。如果省略表达式2,就必须要在循环体中增加循环条件判断语句,如果不满足循环条件,则跳出循环。跳出循环可以用break语句,break语句将在后面介绍。省略表达式2的示例语句如下:
int i;
for( i=0;; i++ )
{
if( i >=10 )
break;
System.out.printf("\n %d=", i*2)
}程序在循环体内增加了if( i >= 10 )条件判断语句,如果i>=10为真,则通过break语句跳出循环,如果循环体内没有跳出循环的条件判断语句,程序将进入无限循环。
(3)省略表达式3
for循环语句中的表达式3一般是用来修改循环变量的值,如果在循环体内有修改循环变量的语句,此时表达式3可以省略。例如如下语句:
int i;
for( i=0; i<10; )
{
i = i+1;
System.out.printf("\n %d=", i*2)
}循环体内的i = i+1等同于for( ; i < 10; i++ )语句中的i++,每循环一次,i就进行加1操作,当i自增到10时,循环终止。
三个表达式都省略
三个表达式都省略的情况比较少见,此时,循环体为有循环变量的赋值语句,循环体内应有修改循环变量和循环条件判断的语句,否则很容易形成无限循环。例如如下语句:
int i=0;
for( ;; ; )
{
i = i+1;
if( i >=10 )
break;
System.out.printf("\n %d=", i*2)
}程序中int i=0为循环变量i赋初值,循环体内i = i+1修改循环变量i的值,if( i >= 10 )判断循环变量i的值是否大于等于10,如果条件为真,则跳出循环。
for循环在Java编程中应用非常广泛,它不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环条件的情况,它完全可以代替while循环。只要弄明白了for循环的三个表达式,就可以掌握for循环的用法,表达式1是进入第一次for循环之前运行,并且只会执行一次;表示式2是for循环的执行条件,满足这个条件后才能进入循环里面的语句;表达式3是在执行一次循环后执行的语句。