Java知识点——控制流程

本文详细讲解了Java中的条件语句(if-else和switch)、循环(while, do-while, for)及其应用。涉及块作用域、计数器控制的for循环和多选项处理的switch语句。理解这些结构有助于编写高效、灵活的程序。

与任何程序设计语言一样, Java 使用条件语句和循环结构确定控制流程。本节先讨论条件语句, 然后讨论循环语句,最后介绍看似有些笨重的 switch 语句,当需要对某个表达式的多个值进行检测时, 可以使用 switch 语句。

块作用域

在深入学习控制结构之前,需要了解 块(block) 的概念。块(即复合语句)是指由一对大括号括起来的若干条简单的 Java 语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。但是,不能在嵌套的两个块中声明同名的变量

条件语句

在Java中,条件语句的格式为:

if (condition) statement

这里的条件必须用括号括起来。与绝大多数程序设计语言一样, Java 常常希望在某个条件为真时执行多条语句。在这种情况下, 应该使用块语句 (block statement), 形 式 为

{
	statement1
	statement2
	.....
}

当条件为真时,将执行括号中的所有语句。在Java中,更一般的条件语句格式如下所示

if (condition) statement1 else statement2

其中else部分是可选的。else子句与最邻近的if构成一组。重复地出现if…else if…是一种很常见的情况

循环

当条件为true时,while循环执行一条语句(也可以是一个语句块)。一般格式是:

while (condition) statement

如果开始循环条件的值就为false,则while循环体一次也不执行。while 循环语句首先检测循环条件。因此, 循环体中的代码有可能不被执行。如果希望循环体至少执行一次, 则应该将检测条件放在最后。 使用 do/while 循环语句可以实现这种操作方式。它的语法格式为:

do statement while(condotion);

这种循环语句先执行语句(通常是一个语句块) 再检测循环条件;然后重复语句再检测循环条件, 以此类推。

确定循环

for 循环语句是支持迭代的一种通用结构, 利用每次迭代之后更新的计数器或类似的变量来控制迭代次数。其一般格式如下:

for(initialize;conditon;update_timer){
	statement1
	statement2
}

for 语句的第 1 部分通常用于对计数器初始化;第 2 部分给出每次新一轮循环执行前要检测的循环条件;第 3 部分指示如何更新计数器。特别指出,如果在 for 语句内部定义一个变量, 这个变量就不能在循环体之外使用。因此, 如果希望在 for 循环体之外使用循环计数器的最终值,就要确保这个变量在循环语句的前面且在外部声明!

多重选择:switch语句

在处理多个选项时, 使用 if/else 结构显得有些笨拙。 Java 有一个与 C/C++ 完全一样的switch 语句。其一般格式如下:

switch(condition){
	case label1:
		...
		break;
	case label2:
		...
		break;
	default:
		...
		break;
}

switch语句将从与选项值相匹配的 case 标签处开始执行直到遇到 break 语句,或者执行到switch语句的结束处为止。如果没有相匹配的 case 标签, 而有 default 子句, 就执行这个子句。
case 标签可以是:

  • 类型为 char、byte、 short 或 int 的常量表达式
  • 枚举常量,不必在每个标签中指明枚举名,
  • 从 Java SE 7开始, case 标签还可以是字符串字面量

中断控制流程语句

与用于退出 switch 语句的 break 语句一样,不带标签的 break 语句可以用于退出循环语句。例如,

	while (years <= 100) 
	{
		balance += payment;
		double interest = balance * interestRate / 100;
		balance +=interest;
		if (balance >= goal ) break;
		years++ ; 
	}

在循环开始时, 如果 years > 100, 或者在循环体中 balance 大于等于 goal , 则退出循环语句。
与 C++ 不同,Java 还提供了一种带标签的 break语句,用于跳出多重嵌套的循环语句。示例如下:

	Scanner in = new Scanner(System.in);
	int n;
	read_data:
	while (. . .) // 带有标签的循环
	{
		. . .
		for (. . .) // 没带标签的循环
		{
			Systen.out.print("Enter a number >= 0: "); 
			n = in.nextlnt()if (n < 0) 
				break read.data; //跳出带有read_data标签的循环
		}
	}
	if (n < 0) // //跳出read_data标签后第一个执行的语句 
	{
		// 处理出错情况
	}

如果输入有误,通过执行带标签的 break 跳转到带标签的语句块末尾。对于任何使用break语句的代码都需要检测循环是正常结束, 还是由 break 跳出。
最后,还有一个 continue 语句。与 break 语句一样, 它将中断正常的控制流程。continue语句将控制转移到最内层循环的首部。还有一种带标签的 continue 语句,将跳到与标签匹配的循环首部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值