for循环语句
for循环是最早被引入的循环结构之一,最早出现在Fortran编程语言中,用于在已知循环次数的情况下进行迭代。后来,它被其他编程语言采用,并逐渐演化成为现代编程语言中常见的循环结构。
循环语句的由来:循环语句的设计灵感来自于现实生活中的循环过程,例如:在生产流水线上重复进行生产加工、在日常生活中重复执行某些任务等。计算机科学家和程序员意识到,如果能够使用一种结构来描述这种重复性,就可以提高代码的效率和可维护性。这就是循环语句的由来。
1、语法
for(初始化表达式;循环条件表达式;循环后操作表达式){ //语句序列 }
- 初始化表达式:用于在进入循环之前执行一次,它可以是赋值表达式、运算表达式等,甚至可以是空语句(什么都不执行),但它不会影响循环的继续与否。
- 循环条件表达式:值为boolean型的表达式,指定循环条件。循环条件表达式必须是产生布尔值的表达式,即结果为true或false。这通常涉及条件运算符、比较运算符等,用于决定循环是否继续执行。
- 循环后操作表达式:负责修整变量,改变循环条件。在每次循环体执行完毕后执行,它也可以是赋值表达式、运算表达式等,同样不会影响循环条件的判断。
在for循环语句中,初始化表达式和循环后操作表达式可以是任意类型的表达式,而循环条件表达式必须是结果为布尔类型(boolean)的表达式。这是因为for循环是根据循环条件表达式的布尔值来判断是否继续执行循环体的,只有当循环条件表达式的值为true时,循环体才会被执行,否则循环会终止。
2、执行顺序
以下是多种for循环各个语句在执行过程中的顺序描述。
描述一:
在执行for循环时,首先执行初始化表达式,这一步通常是完成某一变量的初始化工作;下一步判断循环条件表达似乎的值,若循环条件表达式的值为true,则进入循环体;在执行完循环体后紧接着计算循环后操作表达式,这一步通常是增加或者减少循环控制变量的一个表达式。这样一轮循环就结束了。第二轮循环从计算循环操作后表达式开始,若循环条件表达式返回true,则继续重复上述循环,否则跳出整个for语句结束循环。
描述二:
①执行初始化表达式。
②判断循环条件表达式,如果结果为true执行步骤③④,结果为false跳到步骤⑤。
③执行循环体中的代码。
④执行循环后操作表达式。重复步骤②③④
⑤跳出整个for循环,循环结束。
描述三:
- 初始化表达式:首先,程序会执行for循环中的初始化表达式,通常是为循环计数器或其他计数变量赋初始值。
- 循环条件判断:在每次循环开始之前,循环条件表达式会被判断。如果条件为true,执行步骤3和步骤4;如果条件为false,循环结束,执行步骤5。
- 循环体执行:如果循环条件为true,程序会执行for循环体内的代码块。这是实际的循环操作部分,会重复执行。
- 循环后操作:在执行完循环体后,会执行循环后操作表达式,通常用于更新循环计数器或其他计数变量的值。
- 循环结束:程序会跳出整个for循环,循环结束。
描述四:
3、for循环适用场景
for循环:
1.遍历数组或集合:
遍历数组或集合:当您知道要遍历的次数时,例如遍历数组中的元素,for循环非常适合,因为您可以在循环头部明确设置循环次数。
2.数值范围迭代:
如果需要在一定范围内按照固定步长迭代,例如输出1到10的整数,for循环能够轻松实现。
3.数值范围迭代:
处理固定次数的任务:在某些情况下,您可能需要执行一段代码固定次数,比如打印输出特定的消息,for循环可以很好地处理这种情况。
4、例题
1.1 求和:编写一个程序,计算1到N之间所有整数的和,其中N是用户输入的正整数。
解答:
import java.util.Scanner; //编写一个程序,计算1到N之间所有整数的和,其中N是用户输入的正整数。 public class Test2 { public static void main(String[] args) { sumN(); } public static void sumN(){ Scanner s = new Scanner(System.in); System.out.println("请从键盘输入一个整数:"); int N = s.nextInt(); int sum = 0; for (int i = 1; i<=N; i++){ sum+=i; } System.out.println(sum); } }
1.1 请写出下列程序的输出结果
public class Test { static boolean foo(char c){ System.out.print(c); return true; } public static void main(String[] args) { int i = 0; for(foo('A');foo('B')&&(i<2);foo('C')){ i++; foo('D'); } } }
答案:ABDCBDCB
解析:这道题涉及到了for循环的相关知识点,这个题目中的Test类有两个重要部分组成
部分一:准备工作是定义了一个foo()方法,调用该方法时参数是传一个字符,然后打印C字符,然后方法调用完返回true值。每调一次foo()方法都会把参数打印出来,然后返回true。
部分二:然后我们来看main方法里面,首先定义了一个局部变量i,初始化值为0,然后定义了一个for循环,这个for循环的三个核心要素都具备,分别是初始化表达式 foo(‘A’),循环条件表达式 foo(‘B’),循环后操作表达式。循环体中是 i++ 以及打印 foo(‘D’) 。
然后开始解题,首先记住变量 i = 0,然后开始执行for循环的初始化表达式,结果是打印A,然后判断循环条件表达式 && 左边为true,并且打印 B;&& 右边 i =0<2 ,结果为true,所以循环条件表达式结果为true。进入循环体,i++,然后执行foo(‘D’),打印D。继续执行for循环的循环后操作表达式打印C,然后执行条件表达式,&& 左边打印B,结果为true ,&&右边i=1<2, 结果为true,所以循环条件表达式结果为true,进入循环体i++,打印D,然后执行 foo(‘C’)打印C,然后执行循环条件表达式&&左边**打印B,**但是&&右边i=2<2,结果为false,所以跳出for循环。
条件表达式结果为true,进入循环体i++,打印D,然后执行 foo(‘C’)打印C,然后执行循环条件表达式&&左边**打印B,**但是&&右边i=2<2,结果为false,所以跳出for循环。
该文章收录在《java基础》专栏