Java开发笔记(十八)上下求索的while循环

循环是流程控制的又一重要结构,“白天-黑夜-白天-黑夜”属于时间上的循环,古人“年复一年、日复一日”的“日出而做、日落而息”即是天天周而复始的生活。计算机程序处理循环结构时,给定一段每次都要执行的代码块,而后分别指定循环的开始条件和结束条件,就造成了常见的循环语句。最简单的循环结构只需一个while关键字设置循环条件便可,下面是根据输入数字决定循环次数的代码例子:java

		System.out.println("长夜漫漫,无意睡眠");
		System.out.println("请给他设定一个睡醒的年限");
		Scanner scan = new Scanner(System.in); // 从控制台接收输入文本
		/* nextLine方法表示接收一行文字,以回车键结尾 */
		int limit = scan.nextInt();
		int year = 0;
		while (year < limit) { // 当条件知足时,在循环内部持续处理
			System.out.println("已通过去的年份:"+year);
			year++;
		}
		System.out.println("他足足睡了这么多年:"+year);

 

运行上面的测试代码,输入数字3,连同处理结果的完整日志以下图所示。程序员

单纯的while语句是在每次循环开始前进行条件判断,符合条件则执行一圈代码,不符合的话就退出循环。Java还提供了另外一种形式的do-while循环,该循环以do关键字开头,以while语句结尾,而且条件判断也挪到了每次循环结束后再处理了。条件判断的位置变动形成了while循环和do-while循环之间的差别,while循环在开始工做前一定先判断循环条件是否成立,一旦条件不成立,那么当前循环一次都不会执行,直接跳到循环后面的语句了。而do-while循环迟至第一次循环执行完毕才作条件判断,只有发现循环条件不成立时才姗姗来迟退出循环。这意味着,即便循环条件一开始就不知足,do-while循环也必定要进入循环内部,到此一游后才拍拍屁股离开。
下面经过一个实验观察while循环和do-while循环的不一样之处,演示代码见下,主要是把循环外围的while改为了do-while:测试

		int year = 0;
		do {
			System.out.println("已通过去的年份:"+year);
			year++;
		} while (year < limit); // 当条件知足时,在循环内部持续处理
		System.out.println("他足足睡了这么多年:"+year);

 

而后运行演示代码,假若输入正数,则while循环和do-while循环打印的日志信息并没有区别;要是输入负数,此时两者打印的日志就分道扬镳了。while循环的日志打印结果以下面的左图所示,do-while循环的日志打印结果以下面的右图所示。日志

从上面的实验结果看出,在条件不知足的状况之下,do-while循环依旧强行遛达了一圈,这种先斩后奏的特性过于武断,故而限制了它的使用范围。
不论是while循环仍是do-while循环,它们的条件判断都独立于循环内部代码,要么在循环开始前判断,要么在循环结束后判断。若是要求在内部代码的中间就插入条件判断,并据此决定是退出循环仍是继续循环,那又该当若何?为此Java给循环语句引入了break和continue两个关键字,其中break的做用是跳出整个循环,而continue的做用是跳过本次循环的剩余代码、直接继续下次的循环判断和处理。
如今准备修改以前的代码,打算在println和year++中间进行是否继续循环的判断。首先要把while语句后面的条件式子改成true,表示每次循环先后取消默认的条件校验。而后在println和year++之间插入if语句开展条件判断,条件知足的话,就执行year++以及continue操做;条件不知足的话,就直接跳出整个循环,继续循环之外的代码处理。根据上述思路修改循环代码,改好的代码以下所示:blog

		int year = 0;
		while (true) { // 当条件知足时,在循环内部持续处理
			System.out.println("已通过去的年份:"+year);
			if (year < limit) { // 这里判断可否跳出循环
				year++;
				continue; // 继续下一次循环
			} else {
				break; // 跳出循环。即跳到while循环的右花括号以后
			}
		}
		System.out.println("他足足睡了这么多年:"+year);

 

接着运行修改以后的代码,打印出来的循环运行日志以下图所示:it

可见此时循环内部接连打印了年份一、年份二、年份3,共三行日志。对比修改以前只打印年份一、年份2的两行日志,显然修改以后的代码逻辑更灵活,由于不管循环的内部代码如何变幻无穷,程序员总能找到合适的地方退出循环处理。class

相关文章
相关标签/搜索