跳到主要内容Java 分支结构与循环控制详解 | 极客日志Javajava算法
Java 分支结构与循环控制详解
Java 程序中的流程控制语句,包括顺序结构、分支结构(if-else, switch)和循环结构(for, while, do-while)。详细讲解了各结构的语法格式、执行流程及注意事项,如 switch 的数据类型限制、穿透问题,以及 break 和 continue 的区别。文中还包含多个实战例题,如求和、阶乘、九九乘法表及质数判断等,帮助读者掌握基础逻辑控制。
时间旅人5 浏览 在 Java 程序中,各个语句的执行顺序决定了最终结果。因此,我们需要使用流程控制语句来管理代码的执行顺序。
程序主要分为三种结构:顺序结构、分支结构(选择结构)和循环结构。
1. 顺序结构
顺序结构是程序的默认结构,即从上到下、从左到右依次执行。
2. 分支结构
分支结构也被称为选择结构,一旦加入选择方式,就有了选择性操作。
2.1 单分支的 if 语句
单分支的 if 语句只有一个分支,没有更多的选择。
2.2 双分支的 if-else 语句
双分支的 if-else 语句有两个不同的选择,要么为 true,要么为 false。最多只能执行一个语句组。双分支的 if-else 语句与三目运算符的效果是一样的。
2.3 多分支的 if-else 语句
- if-else 语句有多个分支效果,最终有且仅有一个语句块被执行。
- 当前的条件表达式想要进入,则一定是上一个表达式的结果为 false 时。
2.4 switch 开关语句
switch...case 开关语句也是多分支,只能做相等比较。
- 多分支的 switch 语句,有且仅有一个入口进入。
- switch 语句只能做相等比较。
- switch 语句的表达式的数据类型只支持 byte, short, int, char, String, 枚举(不支持 long)。
switch 语句的穿透
在 switch 语句中的 break 是用来结束当前的 case 的。
break 是终止的意思,在 switch 中主要用来结束整个 switch 语句。
如果在语句体中不添加 break,则会出现 switch 穿透问题,直到遇到 break 或结束为止。
示例:没有 break,输入一月份后续条件仍会默认进行
加入 break 后,输入一月份后续会被中断,不会默认进行
if 和 switch 之间的区别
- if 不会限制条件判断表达式的数据类型。
- switch 的判断只能进行相等判断(byte, short, int, char, String, 枚举)。
- 相同点:都只有一个进入口,都是在进行条件判断后,在进行对于语句体的操作。
3. 代码调试功能
代码调试功能即 Debug 模式,主要是目的是减低执行速度,后期是为了解决问题而生。
- 加入断点【在代码的左侧行数旁边,点击鼠标左键加入断点】
4. 循环结构
4.1 循环结构概述
循环结构就是在 Java 中会出现很多的重复性代码,如果使用循环结构会效率更高。
- 循环体:重复执行的代码称为循环体。可以是一条或者多条语句。
- 循环条件:循环体反复执行的判断条件。一般是关系表达式或者逻辑表达式。
- 实现方式:
- for 循环
- while 循环
- do-while 循环
4.2 for 循环
for 循环就是使用关键字 for 来包裹的循环实现方式。确定了循环次数使用。
- 先执行初始化表达式
- 在执行条件表达式
- 如果条件为 true 时,执行循环体语句块
- 执行迭代语句块
- 执行 2, 3, 4
- 直到条件表达式为 false 时终止
for 循环例题
求 1--100 之间的数字:println 在循环内时,每循环一次都会打印一次结果,如果 print 在循环之外,则只会打印出最后一个结果。
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
求 10!(10 的阶乘=1 * 2 * 3 * ..... * 10) 的数据:product*=i --> product=product*i
求 1--100 之间的奇数之和:初始数字是 1,奇数 + 偶数=奇数,所以每一次循环 i+2 仍属于奇数
求 1--100 之间偶数和:比奇数稍微复杂,需要利用 if 语句来进行判断是否为偶数
逢七过,打印 1--100 之间的数字,如果是 7 的倍数或者包含 7 则打印过,反之打印数字,并计算有多少个"过":注意不只是 7 为过,17、27、70、71 这些数字都是过,需要进行判断,这里使用的是短路或来进行判断
九九乘法表:需要使用到双层 for 循环,需要注意打印乘法表时,被乘数不要大于乘数,同时需要辨别 print 和 println 的用法区别:
print 不会进行换行打印
println 能够进行换行打印
4.3 while 循环
while 循环是以 while 关键字包裹的代码来实现循环的结构。不确定循环次数。
- 先执行初始化表达式
- 执行条件表达式
- 如果条件表达式为 true,则执行循环体语句
- 循环体语句执行后,在执行迭代语句
- 条件表达式 2, 3, 4, 5
for 循环是最常用的循环,开发中几乎 90% 左右的循环都是 for 循环,for 使用场景是明确知道循环次数的情形
while 循环能实现 for 循环全部的功能,即:while 循环可以替代 for 循环。
除此以外,while 循环还适用于不知道具体循环次数的循环(只知道循环结束条件,但不清楚循环多少次结束。)
while 循环最大的特点:适用于不知道循环次数的循环
while 循环例题
- 打印 1--100 之间的数字
- 计算 1--100 之间的数字之和
- 计算 10 的阶乘
- 计算 1--100 之间能够被 7 整除的数字之和
- 需求:限定用户输入内容。提示用户输入 1
7(含 1 和 7)之间的数字。如果用户输入的数字范围不在 17 之内,让用户重新输入,直到用户输入的数字符合要求。
- 需求:世界上最高山峰是珠穆朗玛峰(8844.43 米=8844430 毫米),假如有一张足够大的纸,它的厚度是 0.1 毫米。请问折叠多少次,可以折成珠穆朗玛峰的高度?
4.4 do-while 循环
do-while 循环是以关键字 do 和 while 组合在一起的循环实现方式。不确定循环次数,但至少需要执行一次。
do-while 循环效果和 for 循环和 while 循环效果是一模一样的。
注意:do-while 是先执行循环体再执行条件,则相比较于 for 循环和 while 循环而言,do-while 至少要执行一次循环体。
- 先执行初始化表达式
- 执行循环体语句
- 执行迭代语句
- 最后执行条件表达式
- 如果条件表达式为 true,则执行 2, 3, 4
- 如果条件表达式为 false,则结束循环
do while 循环例题
- 打印 1--100 之间的数字
- 打印 1--100 之间的奇偶数和
- 打印 10 的阶乘
- 打印九九乘法表
4.5 break 和 continue
- 在 switch 语句中,用来终止整个 switch 语句
- 在循环语句中,用来终止当前整个循环
- break 用于结束当前循环。
- continue 用于结束本次循环。
- break、continue 通常是与 if 语句连用。即某种条件满足时才 break 或 continue。
- break 使用比较频繁,经常用在死循环里结束循环。或者用在 for 循环里提前结束循环。
- continue 很少使用
重点:for 循环的变体及其死循环
综合训练
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个范围在 1——10 正整数:");
int n = sc.nextInt();
if (n < 1 || n > 10) {
System.out.println("无法评定");
}
for (int i = 1; i <= n; i++) {
System.out.print("输入第" + i + "次成绩:");
int score = sc.nextInt();
if (score < 0 || score > 100) {
System.out.println("该成绩无效,跳过评级");
} else {
System.out.print("成绩" + score + ",");
switch (score / 10) {
case 10:
case 9:
System.out.println("等级:A");
break;
case 8:
System.out.println("等级:B");
break;
case 7:
System.out.println("等级:C");
break;
case 6:
System.out.println("等级:D");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
System.out.println("成绩:" + score + ",等级:E");
}
}
}


Scanner sc = new Scanner(System.in);
System.out.print("请输入起始值(start):");
int start = sc.nextInt();
System.out.print("请输入终止值(end):");
int end = sc.nextInt();
if (start >= end || start<1 || end>200) {
System.out.println("输入无效,请确保 1<=start<end<=200");
}
String result = "";
int count = 0;
for(int i = start; i<=end; i++){
if (i>=50 && i<=150 && i%4==0 &&(i%10==2 || i%10==6 )){
count+=1;
result = result + i + "、";
}
}
System.out.println(start+"到"+end+"中,满足条件的数字有:"+result+";共"+count+"个");


Scanner sc = new Scanner(System.in);
System.out.print("请输入需要计算的商品数量(m):");
int m = sc.nextInt();
if (m<1 || m>4){
System.out.println("商品数量无法进行计算");
}
for (int i=1;i<=m;i++) {
System.out.println("请输入商品的原价(price):");
int price = sc.nextInt();
System.out.println("请输入折扣等级(level):");
int level = sc.nextInt();
double discount = price;
if (price < 10 && price > 100) {
System.out.println("商品原价无效,跳过计算");
break;
}
if (level < 1 || level > 3) {
System.out.println("折扣等级无效,按原价计算");
} else{
switch (level) {
case 1: discount = price * 0.9; break;
case 2: discount = price * 0.9; break;
case 3: discount = price * 0.9; break;
}
System.out.println("商品原价:" + price + ",折扣等级:" + level + ",折后价:" + discount);
}
}


Scanner sc = new Scanner(System.in);
System.out.print("请输入一个正整数(n):");
int n = sc.nextInt();
if (n < 10 || n > 30) {
System.out.println("输入无效,请输入 10——30 之间的正整数。");
} else {
for (int i = 1; i <= n; i++) {
boolean a = true;
if (i == 1) {
a = false;
} else {
for (int j = 2; j < i; j++) {
if (i % j == 0) {
a = false;
break;
}
}
}
if (a) {
System.out.println(i+"(质数)");
}else {
System.out.println(i);
}
}
}
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- Keycode 信息
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
- Escape 与 Native 编解码
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
- JavaScript / HTML 格式化
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
- JavaScript 压缩与混淆
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online