level 6
Zebe_32
楼主
深入理解for循环及流程控制。在标准的for循环结构中:for(初始化;条件;迭代),初始化部分仅执行一次。当这个循环被运行,它就执行了。在之后运行的过程中,即使用跳转语句重新跳转到这个循环的开始处,这个初始化部分也不会被再次执行。
要深入理解for循环,就必须理解break和continue语句的真正作用。通过下面这个例子,可以深刻理解for循环的工作原理,以及break和continue语句。
public static void main(String[] args) {
int i =0; // 声明一个整型变量 i,赋初值为0
for(i=1;i<=10;i++){ // 建立一个循环,从1到10,迭代器每次递增1
if(i==5){ // 当迭代器的值等于5时,
System.out.println("break"); // 在控制台打印一个break消息
break; // 中断循环
}
}
System.out.println("循环结束。当前 i 的值="+i);
}
执行以上程式,控制台输出的 i 的值是5。现在分析它运行的过程:
A 程序运行,i 的值等于0。
B 进入for循环,执行此结构中初始化部分,执行后,i 的值等于1。
C 判断i<=10条件是否成立?若成立则执行D,否则执行G。
D 执行循环体。如果 i 等于5,执行E;否则,执行F。
E 在控制台打印出“break”,然后中断循环,执行G。
F 迭代器递增1,即 i 的值增1,然后执行C。
G 执行for循环后的语句,在控制台打印出当前 i 的值。
以上就是for循环工作的过程。首先运行初始化部分,运行后判断条件是否成立,如果成立就执行循环体,否则直接跳过循环。执行循环体后,执行迭代部分,执行完后,循环增量发生了变化,继续判断是否满足条件,若满足条件就继续执行循环体,然后再执行迭代部分,以此类推,直到迭代部分得到的值不满足条件时,循环结束。
在以上的程序中,如果循环体为空,即什么内容都不执行,仅运行一个空循环,最后输出的 i 的值是多少呢?答案是11。因为 i 是在方法内部被定义的,所以整个方法内部有效,当循环执行完后,循环中的迭代器最后一次将 i 的值调到了11,这样就导致了循环结束。所以最后输出的结果是11。这也说明了一个问题,迭代器在for循环的工作流程中,它在首次循环过后就正式“上班”,而初始化部分正式“辞职”。
continue语句的作用又是什么呢?如果将上面程式中的break语句换成continue。那么最后输出的结果是11。continue的功能应当如何理解?
“中断本次循环,重新回到循环语句的调用处开始新一轮的循环”。在很多书籍和资料上都这样说明它的作用,这很容易让人产生误解,主要是"中断"和“新的一轮循环”这两句话可能产生误解。如果本次循环中断了,开始新的一轮循环,那么迭代器的值究竟是多少,会被初始化部分重新初始化吗?还是使用现在的值呢?上面已经说到,迭代器在for循环的工作流程中,它在首次循环过后就正式“上班”,而初始化部分正式“辞职”。 也就是说,初始化部分早就“辞职”了,不可能再继续“工作”,而迭代器仍然在勤奋的“工作”。当使用了continue这个语句之后,它首先忽视掉自身后面所有的语句,然后通知迭代器继续“工作”。于是,迭代器再次发生变化,再次判断,再次执行或者结束循环。这才是“中断本次循环”的真正含义 ,它并不是停止,而是中断。何谓中断,可以理解为“从中间断开”,从continue这个语句所在的地方断开。因此这个语句的作用可以概括为“忽略之后的语句,通知循环继续工作”。这个语句的好处就在于能够跳过那些暂时不需要被执行的语句。
在下乃新手中的新手,首发原创贴,以证明自己确实又向前迈进一小步了,呵呵。这是自己对for循环以及流程控制的理解,有误之处还请各位指出。
2013年03月04日 05点03分
1
要深入理解for循环,就必须理解break和continue语句的真正作用。通过下面这个例子,可以深刻理解for循环的工作原理,以及break和continue语句。
public static void main(String[] args) {
int i =0; // 声明一个整型变量 i,赋初值为0
for(i=1;i<=10;i++){ // 建立一个循环,从1到10,迭代器每次递增1
if(i==5){ // 当迭代器的值等于5时,
System.out.println("break"); // 在控制台打印一个break消息
break; // 中断循环
}
}
System.out.println("循环结束。当前 i 的值="+i);
}
执行以上程式,控制台输出的 i 的值是5。现在分析它运行的过程:
A 程序运行,i 的值等于0。
B 进入for循环,执行此结构中初始化部分,执行后,i 的值等于1。
C 判断i<=10条件是否成立?若成立则执行D,否则执行G。
D 执行循环体。如果 i 等于5,执行E;否则,执行F。
E 在控制台打印出“break”,然后中断循环,执行G。
F 迭代器递增1,即 i 的值增1,然后执行C。
G 执行for循环后的语句,在控制台打印出当前 i 的值。
以上就是for循环工作的过程。首先运行初始化部分,运行后判断条件是否成立,如果成立就执行循环体,否则直接跳过循环。执行循环体后,执行迭代部分,执行完后,循环增量发生了变化,继续判断是否满足条件,若满足条件就继续执行循环体,然后再执行迭代部分,以此类推,直到迭代部分得到的值不满足条件时,循环结束。
在以上的程序中,如果循环体为空,即什么内容都不执行,仅运行一个空循环,最后输出的 i 的值是多少呢?答案是11。因为 i 是在方法内部被定义的,所以整个方法内部有效,当循环执行完后,循环中的迭代器最后一次将 i 的值调到了11,这样就导致了循环结束。所以最后输出的结果是11。这也说明了一个问题,迭代器在for循环的工作流程中,它在首次循环过后就正式“上班”,而初始化部分正式“辞职”。
continue语句的作用又是什么呢?如果将上面程式中的break语句换成continue。那么最后输出的结果是11。continue的功能应当如何理解?
“中断本次循环,重新回到循环语句的调用处开始新一轮的循环”。在很多书籍和资料上都这样说明它的作用,这很容易让人产生误解,主要是"中断"和“新的一轮循环”这两句话可能产生误解。如果本次循环中断了,开始新的一轮循环,那么迭代器的值究竟是多少,会被初始化部分重新初始化吗?还是使用现在的值呢?上面已经说到,迭代器在for循环的工作流程中,它在首次循环过后就正式“上班”,而初始化部分正式“辞职”。 也就是说,初始化部分早就“辞职”了,不可能再继续“工作”,而迭代器仍然在勤奋的“工作”。当使用了continue这个语句之后,它首先忽视掉自身后面所有的语句,然后通知迭代器继续“工作”。于是,迭代器再次发生变化,再次判断,再次执行或者结束循环。这才是“中断本次循环”的真正含义 ,它并不是停止,而是中断。何谓中断,可以理解为“从中间断开”,从continue这个语句所在的地方断开。因此这个语句的作用可以概括为“忽略之后的语句,通知循环继续工作”。这个语句的好处就在于能够跳过那些暂时不需要被执行的语句。
在下乃新手中的新手,首发原创贴,以证明自己确实又向前迈进一小步了,呵呵。这是自己对for循环以及流程控制的理解,有误之处还请各位指出。