参考自–《Java核心技术卷1》
文章目录
控制流程
Java使用条件语句和循环结构确定控制流程。
1 块作用域
块(block)即复合语句,指由一对大括号括起来的若干条简单的 Java 语句。
块确定了变量的作用域。一个块可以嵌套在另一个块中。
public static void main(String[] args){
int n;
...
{
int k;
} // 变量k只有在该块中才能被识别
}
但,不能在嵌套的两个块中声明同名的变量:
public static void main(String[] args){
int n;
...
{
int n; //错误,无法通过编译
}
}
2 条件语句
if + else 语句
if(condition) statement
if(condition) statement1 else statement2
注:else 子句与最邻近的 if 构成一组
3 循环
3.1 while 循环
当条件为真(true)时执行:
while(condition) statement
3.2 do/while 循环
先执行循环体,再检测循环条件。循环体至少执行一次。
do statement while(condition)
3.3 for 循环
for 循环语句是支持迭代的一种通用结构,利用每次迭代之后更新的计数器或者类似的变量来控制迭代次数。
for 语句的:
-
第 1 部分通常用于对计数器初始化(该部分定义的变量作用域为整个循环体) ;
-
第 2 部分给出每次新一轮循环执行前要检测的循环条件 ;
-
第 3 部分指示如何更新计数器。
for(int i=1;i<=10;i++){
//这三部分的内部并非固定的,需要灵活使用
...
}
注:在循环中,检测两个浮点数是否相等需要格外小心。如:for(double x=0;x!=10;x+=0.1)
就可能永远不会结束。由于舍入的误差,最终可能得不到准确值(上述 0.1 无法精确地用二进制表示)。
注:在 for 循环内部定义的变量,无法在循环体之外使用。因此,如果需要使用,可以先在循环体外部声明。
4 多重选择:switch 语句
处理多个选项。
Scanner in = new Scanner(System.in);
System.out.println("Select an option(1,2,3,4)");
int choice = in.nextInt();
switch(choice){
case 1:
...
break;
case 2:
...
break;
case 3:
...
break;
case 4:
...
break;
default:
// 1,2,3,4之外的输入
...
break;
}
switch 语句将从与选项值相匹配的 case 标签处开始执行直到遇到 break 语句,或者执行到 switch 语句的结束处为止。如果没有相匹配的 case 标签,而有 default 子句,就执行 default 子句(坏的输入)。
注:switch 语句使用较少(因为如果缺少break语句的话,常常会引发错误)。
5 中断控制流程语句
5.1 break
- 不带标签的break(一般使用的)
- 带标签的break(用于跳出多重嵌套的循环语句)
带标签的break:
read_data:
while(...){
...
for(...){
...
if(...)
break read_data;
//跳出至标签指示的while循环
...
}
...
}
//跳出 read_data 循环后继续由此开始执行以下语句
...
注:事实上,可以将标签应用到任何语句中。
5.2 continue
与 break 一样,它可以中断正常的控制流程。continue 语句将控制转移到最内层循环的首部。
While(...){
...
if(...)
continue; //跳至循环的首部(判断循环部分)
... //如果执行了continue,这部分语句将在此次循环中不执行
}
如果执行了 continue ,则会直接越过 当前循环的剩余部分,立刻跳到循环首部。
注:如果是 for 循环,则 continue 将直接跳至 for 循环的"更新"部分(第3部分)。
注:带标签的 continue 语句,将跳到与标签匹配的循环首部。