`
编程足球
  • 浏览: 251141 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

while 和 for 不完全相同

    博客分类:
  • java
 
阅读更多
1. for和while的语法如下:
 for(initialize;test;increment){
     statement;
 }
 
 initialize
 while(test){
     statement;
     increment;
 }



2. 一般情况下for 和 while 的效果是一样的.
private static void forSameWhile() {
		int sum = 0;
		for (int i = 0; i < 10; sum += i++) {
		}
		System.out.println("sum1 : " + sum);
		
		
		// 使用while 实现和for一样的功能
		sum = 0;
		int i = 0;
		while(i < 10){
			sum += i++;// 等于for语句中的
		}
		System.out.println("sum1 : " + sum);
	}



3. 但是如果语句中包含continue,则有可能存在如下情况(注意,很容易死循环)
/**
	 * @Description : 当语句中包含有continue 的时候 for 和while 就不一样了
	 *  			  for语句continue后多执行了increment 一次
	 * @version ; 1.0
	 */
	   
	private static void forNotSameWhile() {
		int sum = 0;
		for (int i = 0; i < 10; sum += i++) {// continue 后一样可以执行
			i++;
			if (i % 3 == 0) {
				continue;
			}
		}
		System.out.println("sum2 : " + sum);
		
		
		sum = 0;int i = 0;
		while(i < 10){
			i++; // 不加会死循环
			if (i % 3 == 0) {
				continue;
			}
			sum += i++; // 如果被continue 则下面的语句无法执行 increment
		}
		System.out.println("sum2 : " + sum);
	}



4. 但是如果添加上try catch finally的话,有可能又一样了
	/**
	 * @Description : 如果系统使用finally的话,使用continue while 和for保持一致
	 */
	   
	private static void forSameWhileUseFinallyAndContinue() {
		int sum = 0;
		for (int i = 0; i < 10; sum += i++) {// continue 后一样可以执行
			if (i % 3 == 0) {
				continue;
			}
		}
		System.out.println("sum3 : " + sum);
		
		
		sum = 0;int i = 0;
		while(i < 10){
			try {
				if (i % 3 == 0) {
					continue;
				}
			} finally{
				sum += i++; // 无论是否有continue都会执行
			}
		}
		System.out.println("sum3 : " + sum);
	}


5. 如果使用try catch finally ,碰到break,则又有问题:
/**
	 * @author ; rj
	 * @Description : 但是使用了try finally 后如果使用break,则while又会比for多执行一次increment
	 */
	private static void forNotSameWhileUserFinallyAndBreak() {
		int sum = 0;
		for (int i = 0; i < 10; sum += i++) {// continue 后一样可以执行
			if (i % 9 == 8) {
				break;
			}
		}
		System.out.println("sum4 : " + sum);
		
		
		sum = 0;int i = 0;
		while(i < 10){
			try {
				if (i % 9 == 8) {
					break;
				}
			} finally{
				sum += i++; // 无论是否有continue都会执行
			}
		}
		System.out.println("sum4 : " + sum);
	}



所有说 for 和while并不是完全可以相互替换的,
导致不同的原因就是:increment 语句块是否有被执行.
分享到:
评论

相关推荐

    C# for CSDN 乱七八糟的看不懂

    定义 数组是一种排列有序的数据结构,包含于数组中的变量被称为数组的元素, 它们都有相同的类型。 数组声明 int [] array1 = new int[5]; int [,,] array3 = new int[10,20,30]; int [] array1 = new int[] {1,2,4}...

    蓝桥杯的比赛经验心得蓝桥杯简介比赛流程蓝桥杯比赛全程4小时,往年是上午9点到13点 试题形式题目分为结果填空题和程序设计大题

    循环,学会循环的开始和终结的判断,一般使用比较多的就是 for 和 while 。 函数,明白函数的返回类型和参数传递其次,学习基础算法,数据结构和数学知识,排序,这个在比赛中直接使用 sort() 就可以了,还要掌握...

    判断2个字符串是否含有相同的字符

    写纸上和写计算机里并编译成功完全是两个效果。 开始没太多字符串操作,很繁琐、难点也多,后逐渐改进。 典型问题1: sizeof()局限于栈数组 char a[] = "asd213123123"; 形式,并且这种不能用'\0'判断是否结束...

    C语言程序设计标准教程

     do while语句,while语句,for语句 (3) 转向语句  break语句,goto语句,continue语句,return语句 4.复合语句 把多个语句用括号{}括起来组成的一个语句称复合语句。 在程序中应把复合语句看成是单条语句,而...

    流光4.71 for.zip

    要谈流光还真找不着感觉——在小榕的帮助文件里已经把软件的使用方法详尽无比地描述过了(强烈建议使用者使用前将帮助文件多读两遍)——我就说三个方面吧——高手完全可以略过的...... 1、 对某FTP主机一次完整的...

    【03-流程控制与数组】

    foreach循环遍历数组和集合元素时,无须获得数组和集合长度,无须根据索引来访问数组元素和集合元素, foreach循环自动遍历数组和集合的每个元素。 •当使用foreach循环来迭代输出数组元素或集合时,通常不要对...

    swift-tensorflow-profiling:Swift for TensorFlow分析套件

    注意:Swift中的计时器还将包含图形反序列化时间,因此以下比较并非完全不公平。 我正在努力在编译器运行时中添加钩子,以仅TF_SessionRun的调用TF_SessionRun 。 我的测试环境 macOS Mojave(18A336e) 4.2 GHz...

    LabVIEW的公式节点

    这些程序的组成元素与在C语言程序中的元素相似,但不完全相同。  公式节点特别适用于含有多个变量和较为复杂的方程,以及对已有文本代码的利用。可通过复制、粘贴的方式将已有的文本代码移植到公式节点中,无须...

    自考04747《Java语言程序设计(一)》简答题全集.doc

    或者是参数类型不同〔1分〕 17、 什么是构造方法 构造方法是一种特殊方法 〔1分〕 它的名字必须与它所在的类的名字完全相同 〔1分〕 并且不返回任何数据类型,即它是void型 〔1分〕 18、 什么是实例变量和类变量及...

    最新自考04747《Java语言程序设计(一)》简答题全集资料.doc

    或者是参数类型不同(1分) 17、 什么是构造方法 构造方法是一种特殊方法 (1分) 它的名字必须与它所在的类的名字完全相同 (1分) 并且不返回任何数据类型,即它是void型 (1分) 18、 什么是实例变量和类变量及...

    最新JAVA编程题全集_50题及答案

    不使用中间变量 把两个变量的值互换 int a=10; int b=100; a=a*b; b=a/b; a=a/b; System.out.print("a="+a+" b="+b); 折半查找 public class Test { public static int[] data = { 12, 15, 20, 10, 19, 3, 89, ...

    《数据结构 1800题》

    16.设m.n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目。例f(5,3)=5, 有 5种表示方式:3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1。 ①以下是该函数的程序段,请将未完成的部分填入,...

    2009年下半年程序员考试最后冲刺全真模拟试题一

    阶码部件只可进行阶码相加、相减和相乘操作,而不能进行除操作  D.尾数部件只进行乘法和除法运算  【答案】A  …………    下午试卷  …………  试题三  假设以带头结点的单循环链表作非递减有序线性表的...

    js-beatles-loops-lab-bootcamp-prep-000

    披头士乐队 目标 建立一个for循环 建立一个while循环 建立一个do-while循环 指示 确保使用learn运行测试。 创建一个函数theBeatlesPlay... 该函数将接受一个参数,即有关约翰·列侬的一系列事实(请注意,可能不完全是

    js-beatles-loops-lab-js-intro-000

    披头士乐队 目标 建立一个for循环 建立一个while循环 建立一个do-while循环 指示 确保使用learn运行测试。 创建一个函数theBeatlesPlay... 该函数将接受一个参数,即有关约翰·列侬的一系列事实(请注意,可能不完全是

    js-beatles-loops-lab-v-000

    披头士乐队 目标 建立一个for循环 建立一个while循环 建立一个do-while循环 指示 确保使用learn运行测试。 创建一个函数theBeatlesPlay... 此函数将接受一个参数,即有关约翰·列侬的一系列事实(请注意,可能不完全是

    js-beatles-loops-lab-js-apply-000

    披头士乐队 目标 建立一个for循环 建立一个while循环 建立一个do-while循环 指示 确保使用learn运行测试。 创建一个函数theBeatlesPlay... 该函数将接受一个参数,即有关约翰·列侬的一系列事实(请注意,可能不完全是

    2000清华大学2000年大气污染本科试卷.doc

    Stoichimetric ratios for 90% SO2 removal for lime systems range from 1.05 to 1.15, while those for limestone range from 1.25 to 1.6. Using actual ratios of 1.10 and 1.40, calculate the ratio of the ...

Global site tag (gtag.js) - Google Analytics