三、程序流程控制
1. 分支结构if、switch
1) if分支
-
if 根据条件,选择执行某段程序
-
if 分支写法如下:
// if的三种形式
if (条件表达式) {
代码;
}
if (条件表达式) {
代码;
} else {
代码;
}
if (条件表达式) {
代码1;
} else if {
代码2;
} else if {
……
} else {
代码n;
}
注:
- ()后面加分号,不会执行代码段
- if后代码段只有一行代码的情况下,不需要加{}
2) switch
-
switch是通过比较值来决定执行哪条分支
-
switch分支写法如下:
switch(表达式) {
case 值1:
代码;
break;
case 值2:
代码;
break;
……
default:
代码;
}
**注:**swith中存在优化机制,算出表达式的值后不需要顺序寻找,会定位到算出来对应值的分支
注意事项:
1)表达式类型只能是byte、short、int、char、枚举、String;不支持long(值太大,没必要)、double(不精确)、float
2)case给出的值不能重复,且只能是字面量,不能是变量
3)不能忘记写break,否则会出现穿透现象——如果多个case分支代码相同,可以利用这个穿透性
if、switch比较,各自适合什么场景?
1) if更强大,更适合区间判断
2) switch适合值判断
2. 循环结构for
for(int i = 0; i < 3; i++) {
System.out.println("Hello");
}
/*
流程:
首先执行初始化语句i=0
i = 0, 判断循环条件0 < 3, 返回true,计算机进入循环中执行输出,接着执行迭代语句i++;
i = 1, 判断循环条件1 < 3, 返回true,计算机进入循环中执行输出,接着执行迭代语句i++;
i = 2, 判断循环条件2 < 3, 返回true,计算机进入循环中执行输出,接着执行迭代语句i++;
i = 3, 判断循环条件3 < 3, 返回false
*/
for 循环在开发中常见的应用场景:
- 减少重复编写代码,灵活控制程序执行
- 批量生产数据
// for批量生产数据
for (int i = 1; i <= 100; i++) {
System.out.println(i);
}
3. 循环结构while
初始化语句;
while (循环条件){
循环体语句;
迭代语句;
}
while 和 for 有什么区别?
- 功能完全一样
- 使用规范:知道循环几次用for;不知道循环几次用while
4. 循环结构do while
初始化语句;
do {
循环体语句;
迭代语句;
} while (循环条件);
**特点:**先执行,后判断
三种循环的总结:
- for和while都是先判断再循环,do是先循环再判断
- for和while流程功能无异,但最好满足使用规范
- 初始化语句定义的变量作用域不同
5. 死循环、嵌套循环
死循环:服务器程序
/*for (; ;) {
System.out.println("hello");
}*/
// 经典写法
/*while (true) {
System.out.println("world");
}*/
/*do {
System.out.println("gaga");
} while (true);*/
循环嵌套:循环中又包含循环
外部循环执行一次,内部循环执行一轮
public class LoopNestedDemo7 {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
System.out.println("kaka" + i);
}
}
}
}
6. 跳出循环break、continue
**break:**结束循环/结束所在switch分支的执行
**continue:**只能再循环中使用,跳出当前循环的当此执行
7. Random案例
调用Random的步骤
- 导包
- 写一行代码拿到随机数对象
- 调用随机数的功能
官方默认生成[0, x]区间的随机数,如何生成指定区间的随机数——减加法
案例:猜数字游戏
public class Guessplay {
public static void main(String[] args) {
// 猜数字游戏:首先生成一个随机数代表要猜的数字,键盘输入数字代表用户猜测,加入判断提示输入过大或过小
// 随机产生要猜的数据
Random r = new Random();
int x = r.nextInt(100) + 1;
// 获得输入
Scanner input = new Scanner(System.in);
while (true) {
int guess = input.nextInt();
// 判断输入和随机数的大小
if (guess == x) {
System.out.println("猜对了!");
break;
} else if (guess < x) {
System.out.println("过小!大胆猜!");
} else {
System.out.println("过大!收敛一点!");
}
}
/* do {
int guess = input.nextInt();
// 判断输入和随机数的大小
if (guess == x) {
System.out.println("猜对了!");
break;
} else if (guess < x) {
System.out.println("过小!大胆猜!");
} else {
System.out.println("过大!收敛一点!");
}
} while (true);*/
}
}