什么是分支结构
- 任何复杂的程序逻辑都可以通过顺序、分支、循环,三种基本的程序结构实现
- 程序可以在运行过程中,根据不同的条件运行不同的语句。
Java分支结构语句:
if 语句:
- 当条件满足时,执行语句块,然后执行if语句下面的语句;否则跳过语句块,直接执行if语句下面的语句。
if 语句案例演示:
public static void main(String[] args) {
int a = 10;
int b = 1;
if (a < b) {
System.err.println("小于");
}
System.err.println("程序执行完成");
}
说明:程序结束,因为不满足条件。
- 当if语句块中只有一条语句时,{} 可以省略(不建议),但当代码发生更新时容易产生错误,因此就算if里面只有一句,也要加上 {} 。
if-else 语句:
- 当条件满足时,执行语句1,然后执行if-else语句下面的代码;否则执行语句2,再执行if-else语句下面的代码。
if-else 语句案例演示:
public static void main(String[] args) {
int a = 10;
int b = 1;
if (a > b) {
System.err.println("大于");
} else {
System.err.println("小于");
}
}
输出结果:大于
因为条件满足,执行语句1里面的语句
- else-if结构就是if-else嵌套的简便写法:
else-if 语句案例演示:
public static void main(String[] args) {
double fraction = 87.9;
if (fraction >= 95) {
// 输出1
} else if (fraction >= 75) {
// 输出2
} else {
// 输出3
}
}
switch-case 语句:
- switch-case 语句执行逻辑:
- switch-case 语句是一种特殊的分支结构,可以根据一个整数表达式的不同取值,从不同的程序入口开始执行。
- switch-case 和 break 联合使用:
- 通常case1、case2、… N,每个case对应的不同的操作,可以和break语句配合使用,执行完相应的语句后,退出switch块,不会继续执行下面的语句。
switch-case 语句案例演示:
public static void main(String[] args) {
// 模仿10086电话
int num = 1;
switch (num) {
case 1:
System.err.println("查话费");
break;
case 2:
System.err.println("查流量");
break;
case 3:
System.err.println("办理业务");
break;
default:
System.err.println("人工服务");
}
}
输出结果:查话费
因为满足case1里面的条件,跳出switch,不会再继续执行下面的代码
switch-case:
- 优点:效率高、结构清晰
- 缺点:整数、相等
- 注:从JDK7.0开始,switch-case支持字符串表达式。
循环结构:
什么是循环结构:
- 循环是程序设计语言中反复执行某写代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复执行。说白了就是反复执行一段相同或相似的代码
- 循环三要素:
- 循环变量的初始化
- 循环的条件(以循环变量为基础)
- 循环变量的改变(向着循环的结束变)
while语句的执行逻辑:
- 计算boolean表达式的值
- 当值为true则执行语句块,语句执行完以后再次判断boolean值,如果值还是为true则继续执行,如此循环,直到boolean的值为false时退出while循环。
while语句案例演示:
public static void main(String[] args) {
int num = 1;
while (num <= 9) {
System.out.println(num + "*9=" + num * 9);
num++;
}
System.out.println("over");
}
说明:
先判断条件,在执行,条件不满足的时候,跳出循环。
- 注:一般情况下,循环操作中会存在循环的条件不满足的可能性,否则将成为死循环
- 使用break语句跳出循环:
while语句使用break案例演示:
public static void main(String[] args) {
int i = 0;
while (i < 10) {
if (i == 5) {
break;
}
System.err.println("i的值为:" + i);
i++;
}
}
说明:
i的初始值为0,代码进入while块中判断,满足条件,进入if判断,条件不满足 i++,
当i通过自加到5的时候,满足if块的条件,用break跳出循环。
do-while语句:
- 先计算boolean表达式,如果为true,再次执行语句块,如此循环,直到为false为止。
do-while语句案例演示:
public static void main(String[] args) {
// 模拟用户登录
Scanner scan = new Scanner(System.in);
int pwd = 123; // 初始密码
int i = 0;
System.err.println("初始密码:" + pwd);
int guess; // 用户输入的密码
do {
System.out.println("请输入密码!");
System.out.println("输入密码共有3次机会!"); // 告诉用户,输出错误密码的次数
guess = scan.nextInt();
if (i == 2) { // 计算错误密码次数
break; // 跳出循环
}
i++;
System.err.println("密码输入错误次数为:" + i);
} while (guess != pwd);
if (guess == pwd) {
System.out.println("密码正确");
} else {
System.out.println("密码错误");
}
}
说明:
先执行do语句块里的代码,在判断条件,条件为true时,再次执行语句块,等条件为false时,跳出循环。
- while和do-while的区别
- while:先判断后执行,有可能一次都不执行
- do-while:先执行后判断,至少会执行一次
for 语句:
- for语句的执行逻辑:
for (int j = 0; j < args.length; j++) {
String string = args[j];
}
说明:
for (表达式1;表达式2;表达式3) {
语句块(循环体)
}
for 语句案例演示:
for (int i = 0; i < 3; i++) {
System.err.println("学习Java");
}
System.err.println("条件不满足,程序结束");
说明:
程序第一轮执行顺序:i=0,0<3(条件满足),i++ 输出循环体语句
程序第二轮执行顺序:i=1,1<3(条件满足),i++ 输出循环体语句
程序第三轮执行顺序:i=2,2<3(条件满足),i++ 输出循环体语句
程序第四轮执行顺序:i=3,3<3(条件不满足)程序结束
死循环案例演示:
for (;;) {
System.err.println("学习Java");
}
说明:
当所有表达式为空时,进入死循环状态
- break可用于循环语句或者switch语句中,可以使程序终止循环而执行循环后面的语句,常常与条件语句一起使用。
- continue 只能用于循环中,作用为跳过循环体中剩余语句,而执行下一次循环
for循环中使用continue案例演示:
public static void main(String[] args) {
int num = 0;
for (int i = 1; i <= 100; i++) {
if (i % 10 == 3) {
continue;
}
num += i;
}
}
说明:
当if条件满足时continue跳过循环体中剩余的语句
程序执行:
num = 0
i = 1 num = 0 + i(1)
i = 2 num = 1 + i(2)
i = 3 满足条件,所以跳出剩余循环体中的语句。
以此类推,当i 的值为101的时循环结束。
循环问题:
- 需要多次重复执行一个或多个任务的问题考虑使用循环来解决,一般情况for循环使用最多。
- 循环问题定义——当循环:
- 如果业务转换为当这样时,优先选择while语句来实现。
- 循环问题定义——直到循环:
- 如果业务转换为直到这样时,优先选择do-while语句来实现。
- 循环问题定义——固定次数循环
- 如果业务中获取一个确切的循环次数,考虑for循环。