主要内容
- 顺序结构
- 选择结构
- 循环结构
学习目标
- 三种控制结构熟练使用
前言 流程控制
流程控制: 在一个程序执行的过程中, 语句块中各条语句的执行顺序
.
问题: 为什么要进行流程控制?
例如: 一个打印1到5之间数字的小代码, 我们可以采用方式1: 顺序控制结构
, 代码自上而下被机器依次执行.
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
如果是打印1-100呢?
System.out.println(1);
System.out.println(2);
...
...
System.out.println(99);
System.out.println(100);
这样写会出事故的. 既然是重复的事情, 大多数编程语言都具备了循环这种语句结构, 我们只需要告诉机器, 针对哪些情况做同样的事情就好了.所以有如下方式2, 也就是循环控制语句
:
int num = 1;
//告诉机器要做同样事情的条件范围, 于是, 程序员可以少写很多代码了.
while(num<=100){
System.out.println(num);
num++;
}
还有些情况, 机器自动的做什么操作是不明确的.
例如: 学员分配宿舍, 如果是男的,系统分配一个男生宿舍; 女的自动分配一个女生宿舍. 也就是针对学员的性别做判断, 执行不同的操作, 这就是选择结构, 或者叫分支结构
.
String gender = "男";
//String gender = "女";
if(gender=="男"){ //分支结构会根据gender不同取值, 执行不同的操作
System.out.println("请到男生宿舍报道");
}else{
System.out.println("请到女生宿舍报道");
}
现在, 你知道了, 这些不同的控制结构, 可以让我们更容易实现不同的功能.
问题: 流程控制结构有哪些?
顺序结构, 选择(分支)结构, 循环结构
第一节 顺序结构
1.1 概述
顺序结构: 代码自上到下,依次执行.
我们在前两章中写的代码都是顺序执行的, java虚拟机在运行字节码程序的时候, 会按照代码顺序, 自上到下依次执行.
第二节 选择结构
2.1 概述
选择结构: 分情况判断, 根据不同的情况, 选择执行不同的代码块.
2.2 种类(2种)
选择控制结构1: if选择语句
语法格式:
//------------if语法1:------------
if(布尔表达式){
执行语句;
}
//------------if语法2:------------
if(布尔表达式){
执行语句1;
}else{
执行语句2;
}
//------------if语法3:------------
if(布尔表达式){
执行语句1;
}else if(布尔表达式){
执行语句2;
}...{
...;
}else{
执行语句n;
}
选择控制结构2: switch选择语句
语法格式:
switch(表达式){
case 目标值1:
执行语句1;
break;
case 目标值2:
执行语句2;
break;
...:
...;
break;
case 目标值n:
执行语句n;
break;
default:
执行语句default;
break;
}
switch语句的执行流程:
1, 求表达式
的值
2, 把上面表达式
的值依次与case后面的目标值
去比对
- 如果比对成功, 执行该case块的执行语句, 直到遇上
break
跳出整个switch块
- 如果没有比对成功, 那么继续比对下一个case
3, 如果所有case目标值都没有比对成功, 那么执行default语句块.
学员提问1: case后面的目标值
可以使用哪些Java数据类型?
答: byte, short, int, char, enum(JDK5), String(JDK7)
其实本质上,switch只支持整形数据.
byte,short,char类型可以在不损失精度的情况下向上转型成int类型;
枚举类型有一个ordinal方法,该方法实际上返回一个int类型的数值;
String类中有一个hashCode()方法, 结果也是返回int类型.
使用的时候, 记住上面几种类型就可以了.
学员提问2: break省略会有什么现象?
答: 在匹配成功的case目标值开始执行下面的语句, 因为没有break终止继续执行, 那么下面的case目标值不再检测, 直接执行下去(成了顺序执行结构了).
第三节 循环结构
3.1 概述
循环语句: 在满足条件的情况下, 反复执行某一段代码, 这段被重复执行的代码被称为循环体语句, 当反复执行这个循环体时, 需要在合适的时候把循环条件修改为false, 从而结束循环,否则循环将一直执行下去,形成死循环.
3.2 种类(3种)
循环控制结构1: for循环语句
语法格式:
for(初始化变量;循环条件;表达式){
循环体;
}
执行流程:
创建
初始化变量
;-
不断使用
初始化变量
去做循环条件
判断循环条件
判断返回true,执行循环体;循环条件
判断返回false,退出循环. 表达式
用于修改初始化变量
注意事项:
-
初始化变量
,只执行一次; -
表达式
用于改变变量; -
循环条件
用于限定循环的次数.
循环控制结构2: while循环语句
语法格式:
创建初始化变量;
while(循环条件){
循环体;
改变循环变量;
}
for和while的区别:
- 两者可以互换使用;
- for适合于次数一定的循环;
- while适合次数不限定的循环.
循环控制结构3: do...while循环语句
语法格式:
do{
循环体;
循环变量变更;
}while(循环条件判断);
3.4 循环控制
场景: 到现在为止的循环语句都是循环到条件不符合才会终止, 是否可以中途实现程序的跳出呢?
break: 终止循环
continue: 跳过本次循环,进入下一轮循环
3.5 for和while的选择
循环代码编写技巧
1, 循环次数明确一般用for,循环次数不定一般用while
2, 设置初始变量值
3, 设置循环的禁止条件(否则会死循环下去)