与任何程序设计语言一样, 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 语句,将跳到与标签匹配的循环首部
本文详细讲解了Java中的条件语句(if-else和switch)、循环(while, do-while, for)及其应用。涉及块作用域、计数器控制的for循环和多选项处理的switch语句。理解这些结构有助于编写高效、灵活的程序。
1421

被折叠的 条评论
为什么被折叠?



