Java学习之路——流程控制
程序流程控制
- 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
- 其流程控制方式采用结构化程序设计中规定的三种基本流程控制,即:
- 顺序结构。
- 程序从上到下逐行地执行,中间没有任何判断和跳转。
- 分支结构。
- 根据条件,选择性地执行某段代码。
- 有 if-else 和 switch-case 两种分支语句。
- 循环结构。
- 根据循环条件,重复性的执行某段代码。
- 有 while、do...while、for 三种循环语句。
- 注:JDK 1.5 提供了 foreach 循环,方便的遍历集合、数组元素。
顺序结构
- 程序默认都是自上而下执行代码。
分支语句 1:if-else 结构
- if 语句三种格式:
if(条件表达式){ 执行代码块; }
// 二选一 if(条件表达式){ 执行代码块1; }else{ 执行代码块2; }
// 多选一 if(条件表达式1){ 执行代码块1; }else if(条件表达式2){ 执行代码块2; }...else{ 执行代码块 n; }
2.if-else 使用说明:
- 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量。
- 语句块只有一条执行语句时,一对儿
{}
可以省略,但建议保留。 - if-else 语句结构,根据需要可以嵌套使用。
- 当 if-else 结构是“多选一”时,最后的 else 是可选的,根据需要可以省略。
- 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓。
- 当多个条件是“包含”关系时,“小上大下 / 子上父下”。
3.如何从键盘获取不同类型的变量:需要使用 Scanner 类。
- 导包:
import java.util.Scanner;
。 - Scanner 的实例化:
Scanner scan = new Scanner(System in);
- 调用 Scanner 类的相关(next() / nextXxx())方法,来获取指定类型的变量。
import java.util.Scanner; class ScannerTest{ public static void main(String[] args){ Scanner scan = new Scanner(System in); int num = scan.nextInt(); System.out.println(num); } }
分支语句2:switch-case 结构
- 格式:
switch(表达式){ case 常量1: 语句1; break case 常量2: 语句2; break; ... case 常量n: 语句n; break; default: 语句; break; }
2.说明:
- 根据 switch 表达式中的值,依次匹配各个 case 中的常量。一旦匹配成功,则进入相应 case 结构中,调用其执行语句。当调用完执行语句之后,则仍然继续向下执行其他 case 结构中的执行语句,直到遇见 break 关键字或此 switch-case 结构末尾结束为止。
- break 可以使用在 switch-case 结构中,表示一旦执行到此关键字,就跳出 switch-case 。
- switch 结构中的表达式,只能是如下的 6 种数据类型之一:
- byte
- short
- char
- int
- 枚举类型(JDK 5.0新增)
- String 类型(JDK 7.0新增)
- case 之后只能声明常量,不能声明范围。
- break 是可选的。
- default:相当于 if-else 结构中的 else 。default 是可选的,而且位置是灵活的。
- 凡是可以使用 switch-case 的结构,都可以转换为 if-else 结构,反之则不成立。
- switch-case 中的情况不能太多。
循环结构
- 循环结构:
- 在某些条件满足的情况下,反复执行特定代码的功能。
- 循环语句分类:
- for 循环。
- while 循环。
- do-while 循环。
- 循环语句的四个组成部分:
- 初始化部分( init_statement )
- 循环条件部分( test_exp ) --> 是 Boolean 类型。
- 循环体部分( body_statement )
- 迭代部分( alter_statement )
循环结构 1:for 循环
- 用法:
for(int i = 1;i <= 5000;i++){ // 初始化部分 // 循环条件 // 迭代部分 System.out.println("Hello World!"); // 循环体 }
循环结构 2:while 循环
- 结构:
int i = 1; // 初始化部分 while(i<5000){ // 循环条件 // 循环体 Syetem.out.println("Hello World!"); // 迭代部分 i++ }
2.说明:
- 写 while 循环不能丢了迭代条件,如果丢了会导致死循环。
- 写程序要避免死循环。
- for 循环和 while 循环是可以相互转换的,但是它们的初始化作用域不同。
- 出了 while 循环,
i
仍然可以调用。
循环结构3:do-while 循环
- 结构:
int i = 1; // 初始化部分 do{ // 循环体 System.out.println("Hello World!"); // 迭代部分 i++; }while(i<5000) // 循环条件
2.说明:
- do-while 至少会执行一次循环体。
- 开发中,使用 for 和 while 的会更多一些,较少使用 do-while 。
嵌套循环
- 将一个循环结构(A)声明在另一个循环结构(B)的循环体中,就构成了嵌套循环。
- 外层循环:循环结构(B)。
内层循环:循环结构(A)。
for(int j = 1;j <= 4;j++){ for(int i = 1;i<=6;i++){ System.out.println("*"); } System.out.println(); }
- 内层循环结构遍历一遍,外层循环结构循环体执行一遍。
特殊关键字的使用:continue 和 break
关键词 | 适用范围 | 在循环中使用的作用 | 相同点 |
break | switch-case 循环结构 |
结束当前循环 | 关键字后面不能声明执行语句 默认跳出包裹此关键字最近的一层循环 |
continue | 循环结构 | 结束当次循环 | 关键字后面不能声明执行语句 默认跳出包裹此关键字最近的一层循环的当次循环 |
结束指定的循环
label:for(int i = 1;i <= 4;i++){ for(int j = 1;j <= 10;j++){ if(j % 4 == 0){ break label; // continue label; } } }
附加:特殊流程控制语句
- return:并非专门用于结束循环,功能是结束一个方法。当一个方法执行到一个 return 语句时,这个方法将被结束。
- 与 break 和 continue 不同的是,return 直接结束整个方法,不管这个 return 处于多少层循环之内。