龙空技术网

Java中的break和continue语句还可以这样玩,兼讲empty语句

传新的视界 342

前言:

现时姐妹们对“java中的退出语句”可能比较珍视,姐妹们都需要剖析一些“java中的退出语句”的相关文章。那么小编也在网络上网罗了一些对于“java中的退出语句””的相关文章,希望看官们能喜欢,大家快快来学习一下吧!

声明:

本文为牛旦教育原创,头条首发,所有权保留,转载请注明来源。

常规编程中,对于break和continue的应用,最典型的应用场景往往是用在循环控制语句中。

其实,对这两个关键字,它们不只是跳出当前循环和继续下一次循环,还有更多的其它应用场景,本文就来围绕这两个关键字做个进一步探讨。

本文是相对基础的编程学习,如果有读者想从头多快好省的学习Java编程,推荐购买@牛旦教育IT课堂 的这个专栏从头跃:Java从入门到实战(极速版)

下面就来介绍如何全面完整break和continue。

1.break语句

break语句用于从程序块(循环体和代码块)中退出。 有两种形式的break语句:

• 未标记break语句

• 标签break语句

一个没有标记的break语句的例子是:

	break;

一个有标记的break语句的例子是:

	break label;

我们经常在switch、for循环、while循环和do-while语句中使用未标记的break语句。 它将控制权从switch、for循环、while-loop和do-while语句中转移出来。 在这四种嵌套语句的情况下,如果在内部语句中使用了未标记的break语句,则它仅将控制权转移出内部语句块,而不是转出外部语句。 假设您想要如图所示打印3x3矩阵的下半部分(矩阵对角线及以下的元素):

11

21 22

31 32 33

要仅打印3x3矩阵的下半部分,可以编写以下代码片段:

	for(int i = 1; i <= 3; i++) {			for(int j = 1; j <= 3; j++) {				System.out.print ( i + "" + j);				if (i == j) {					break; // 退出内循环语句块				}			 System.out.print("\t");			}			System.out.println();		}

11

21 22

31 32 33

break语句已在内部for循环语句中使用。 当外循环计数器(i)的值等于内循环计数器(j)的值时,将执行break语句,并退出内循环。 如果要从内部for循环语句中退出外部for循环语句,则必须使用带标签的break语句。 Java中的标签是任何有效的Java标识符,后跟冒号。 以下是Java中的一些有效标签:

• label1:

• alabel:

• Outer:

• Hello:

• IamALabel:

现在在前面的示例中使用带标签的break语句并查看结果。

	outer: // 定义一名为outer的标签	for(int i = 1; i <= 3; i++ ) { 	 for(int j = 1; j <= 3; j++ ) { 	 System.out.print(i + "" + j); if (i == j) { 	 break outer; // 退出外部循环 	 } 	 System.out.print("\t"); 	 } 	System.out.println(); 	} // 外部标签在此结束

前面的代码片段的输出如下:

11

为什么它只打印3x3矩阵的一个元素? 这次你在内部的for循环语句中使用了一个带标签的break语句。 当i == j第一次值为true时,会执行带标签的break语句。 它将控制权转移到已标记为outer的块外。 请注意,外部标签出现在外部for循环语句之前。 因此,与外部标签关联的块是外部for循环语句。 带标签的break语句不仅可以用在switch,for,while和do-while语句中, 相反,它可以用于任何类型的块语句。 以下是标记为break的简单例子:

	blockLabel:	{//块开始	 int i = 10;	 if (i == 5) {	 break blockLabel; // 退出blocklabel块	 }	 if (i == 10) {	 System.out.println("i is not five");	 }	}//块结束

要记:一个带标记的break语句的重要一点是,与break语句一起使用的标签,必须是使用该标签标记的break语句所在的块标签。 以下代码片段说明了标签break语句的不正确使用:

	lab1:	{	 int i = 10;	 if (i == 10)	 break lab1; // Ok. lab1 标签可用	 }	lab2:	{	 int i = 10;	 if (i == 10)	 // 编译时错误. lab1 不能用在此处	 // 因为此块没有与lab1标记关联	 //此块仅能使用lab2标记.	 break lab1;	}
2.Continue语句

continue语句只能在for循环、while循环和do-while语句中使用。 有两种形式的continue语句:

• 未标记continue语句

• 已标记continue语句

未标记continue语句示例:

	continue ;

已标记continue语句示例:

	continue label ;

当在for循环中执行continue语句时,会跳过当前循环体中的其余语句,并执行表达式列表中的表达式。 如下所示,可以使用for语句打印1到10之间的所有奇数整数:

	for (int i = 1; i < 10; i += 2) {	 System.out.println(i);	}

在这个for语句中,在表达式列表中将i的值增加2。 可以使用continue语句重写以前的for-loop语句,如下图所示。

图-1 在for循环语句中使用continue语句

表达式i%2返回的值为i除以2的值,且表达式i%2 == 0返回true情况。 在这种情况下,将执行continue语句并跳过最后一条语句System.out.println(i)。 递增语句i++是在continue语句执行之后执行的。前面的代码片段当然不是使用continue语句的最好例子,然而,它的目的是说明它的用法。^_^

当在while循环或do-while循环内执行未标记的continue语句时,会跳过循环中的其余语句,并为下一次迭代而计算条件表达式。 例如,下图2中的代码片段将在while循环内使用continue语句打印1到10之间的所有奇数整数。

图-2. 在while循环语句中使用continue语句

在for循环和while循环中使用continue语句的主要区别是控制权转移的地方。 在for循环中,控制转移到表达式列表中,在while循环中将控制转移到条件表达式。 这就是为什么for循环语句不能总是在不修改某些逻辑的情况下转换为while循环语句的原因。

未标记的continue语句总是持续最内层的for循环、while循环和do-while循环。 如果你正在使用嵌套循环语句,则需要使用带标签的continue语句在外部循环中继续。 例如,您可以使用如下所示的continue语句重新编写打印3x3矩阵的下半部分的代码片段:

	outer: // 标签outer开始处	for(int i = 1; i <= 3; i++) {	 for(int j = 1; j <= 3; j++) {	 System.out.print(i + "" + j);	 System.out.print("\t");	 if (i == j) {	 System.out.println(); // 换行	 continue outer; // 继续下一次的outer循环	 }	 }	} //标签 "outer"结束处

补充一点,空语句:

3.Empty语句

一个空的语句本身就是一个分号。 一个空的语句什么都不做。 如果一个空的语句没有做任何事情,为什么要它? 有时候一个语句作为构造语法的一部分是必要的。但是,你可能不需要做任何有意义的事情。 在这种情况下,将使用空语句。 for循环必须有与之相关的语句。 但是,要打印1到10之间的所有整数,可只使用for循环语句的初始化、条件表达式和表达式列表部分实现。 在这种情况下,你没有与for语句关联的语句。 因此,在这种情况下使用空语句,如下所示:

	for(int i = 1; i <= 10; System.out.println(i++)) 	; // 此分号(;)就是for循环的空语句

有时,使用空语句来避免代码中的双重否定逻辑。 假设noDataFound是一个布尔变量。 可以编写一段代码,如下所示(当然你可以不这样干):

	if (noDataFound)	 ; // 一个空语句	else {	 // 做些处理	}

前面的if-else语句可以在不使用空语句的情况下这样编写:

	if (!noDataFound) {	 // 做些处理	}

使用哪种代码,是个人选择的事情。 最后,请注意,如果您键入两个或更多分号(只需要一个分号),则不会导致任何错误,因为每个额外的分号都被视为空语句。 例如:

	i++; // Ok.没问题,分号式语句的一部分	i++;; // 依然可行,第二个分号被认为是个空语句

如果语句不被允许,则不能使用空语句。 例如,当只允许一个语句时,添加一个额外的空语句会导致错误,最常见的估计就是if语句了。如下面的代码片段所示。 它将两个语句联系在一起:i++;和一个空语句(;),一个if语句,只允许一个语句。

	if (i == 10)	 i++;; //编译时错误.else语句前不能使用两个语句	else	 i--;

当你有个好习惯,即把条件或循环语句都用一对大括号包围起来,那这错误就能避免了。

最后,给出一个小练习,通过循环和标记break和continue语句实现:

1)挑出100以内的整数的几个奇数;

2)一个数一行,把1到挑出数之间的自然数在一行打印出来。

自己动手玩下试试吧。

留意:我会在留言中给出一个参考答案。

标签: #java中的退出语句 #continuejava #java退出语句