流程控制语句
流程控制语句
1 键盘录入
获取用户在控制台输入的内容,使用到了类型是引用数据类型
引用数据类型使用步骤:
- 导包(java.lang包的不需要导入)
- 创建变量 引用数据类型 变量名 = new 引用数据类型(参数);
- 使用变量 变量名.方法名();
2 流程控制语句
2.1 分类
- 顺序结构
- 选择结构
- 循环结构
2.2 顺序结构
是程序中最简单最基本的流程控制,没有特定的语法结构。按照代码的先后顺序,依次执行。
public static void main(String[] args) {
System.out.println("一天晚上");
System.out.println("两个和尚");
System.out.println("三更半夜");
System.out.println("四处流浪");
}
2.3 选择结构
- 选择结构也称之为叫分支结构
- 选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断。逻辑运算的结果有两个,所以会产生选择,按照不同的选择执行不同的代码。
- java语言提供了两种选择结构的语句
- if语句
- switch语句
2.3.1 if语句
格式一:
if (布尔表达式){
语句体;
}
- 执行流程
- 首先判断布尔表达式的结果是true还是false
- 如果是true就执行语句体
- 如果是false就不执行语句体
if 语句体中只有一行代码,大括号可以省略
流程图

public static void main(String[] args) {
System.out.println("晚上没事在大街上闲逛");
System.out.println("请输入您的年龄");
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
if (age >= 18)
System.out.println("去网吧坐坐");
System.out.println("开机");
System.out.println("上号");
System.out.println("骂人");
System.out.println("下机");
System.out.println("回家睡觉");
}
格式二:
if (布尔表达式){
语句体1;
}else {
语句体2;
}
-
执行流程
- 首先判断布尔表达式的结果是true还是false
- 如果是true就执行语句体1
- 如果是false就执行语句体2
-
流程图

public static void main(String[] args) {
// 输入一个数字,判断是奇数还是偶数
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
if (num % 2 == 0){
System.out.println(num + "是偶数");
}else {
System.out.println(num + "是奇数");
}
}
格式三:
if (布尔表达式1){
语句体1;
}else if (布尔表达式2){
语句体2;
}else if (布尔表达式3){
语句体3;
}...
else if (布尔表达式n){
语句体n;
}else{
语句体n+1;
}
执行流程:
- 首先判断布尔表达式1的结果是true还是false
- 如果是true就执行语句体1
- 如果是false就继续判断布尔表达式2的结果是true还是false
- 如果是true就执行语句体2
- 如果是false就继续判断布尔表达式3......
- 如果所有的布尔表达式的结果都是false,就执行语句体n+1
流程图

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
if (age >=0 && age <= 1){
System.out.println("婴儿");
}else if (age > 1 && age <= 7){
System.out.println("幼儿");
}else if (age > 7 && age <= 12){
System.out.println("儿童");
}else if (age > 12 && age <= 18){
System.out.println("少年");
}else if (age > 18 && age <= 35){
System.out.println("青年");
}else if (age > 35 && age <= 50){
System.out.println("中年");
}else if (age > 50 && age <= 110){
System.out.println("老年");
}else {
System.out.println("年龄有误");
}
}
课堂练习:
x和y的关系满足如下
x >= 3 y = 2x + 1
-1 < x < 3 y = 2x
x <= -1 y = 2x - 1
让用户输入x的值,计算出y的值
public static void main(String[] args) {
// 获取用户输入的x的值
Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();
int y;
if (x >= 3){
y = 2 * x + 1;
}else if (x > -1 && x < 3){
y = 2 * x;
}else {
y = 2 * x - 1;
}
System.out.println("y的值是" + y);
}
根据用户输入的月份,显示正确的季节
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt();
if (month >= 3 && month < 6)
System.out.println("春天适合露营");
else if (month >= 6 && month < 9)
System.out.println("夏天适合游泳");
else if (month >= 9 && month <= 11)
System.out.println("秋天适合登高");
else if (month == 12 || month == 1 || month == 2){
System.out.println("冬天适合睡觉");
}else
System.out.println("输入有误!");
}
2.3.2 switch语句
格式:
switch(表达式){
case 目标值1:
语句体1;
break;
case 目标值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
- 格式解释:
- switch表示这是switch语句
- 表达式的取值类型:byte、short、int、char
- JDK5之后可以放枚举
- JDK7之后可以放String
- case后面跟的是表达式进行匹配的值
- 语句体就是一条或者多条语句
- break表示中断,结束的意思。会立即结束switch语句
- default表示上面都不匹配时执行的语句
流程图

- 注意点:
- default的break如果在代码的最后,可以不写,但是不建议
- switch中的语句,顺序不影响最终的结果
- case具有穿透效果,如果没有break的影响,那么会一直执行下去
public static void main(String[] args) {
int i = 11;
switch (i){
case 3:
System.out.println("3月份适合玩");
break;
case 6:
System.out.println("6月份适合考试");
break;
case 10:
System.out.println("10月份适合放假");
break;
default:
System.out.println("傻x吧你");
break;
}
}
课堂练习:根据用户输入的月份,输出对应的季节
public static void main(String[] args) {
// 获取用户输入的月份
Scanner s = new Scanner(System.in);
int month = s.nextInt();
switch (month){
case 3:
case 4:
case 5:
System.out.println("浅草才能没马蹄");
break;
case 6:
case 7:
case 8:
System.out.println("夏天去河里游泳");
break;
case 9:
case 10:
case 11:
System.out.println("秋天去爬山");
break;
case 12:
case 1:
case 2:
System.out.println("冬天打雪仗");
break;
default:
System.out.println("输入有误");
break;
}
}
JDK17特性:switch语句
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String cityName = scanner.next();
String provinceName = switch (cityName){
case "郑州","洛阳","开封" -> {
System.out.println("河南是个好地方");
yield "河南省";
}
case "武汉","襄阳","孝感" -> "湖北省";
case "理塘","成都","乐山" -> "四川省";
case "石家庄市","燕郊","廊坊" -> "河北省";
default-> "妈妈省的";
};
System.out.println(provinceName);
}
2.4 循环结构
2.4.1 概述
循环语句可以在满足循环条件的情况下,反复执行某一段代码。
2.4.2 循环语句的组成
- 循环变量初始化(初始化表达式)
一条或者多条语句,完成一些初始化操作
- 循环出口(布尔表达式)
这是一个boolean表达式,能够决定是否执行循环体
- 循环体
就是要多次执行的代码
- 循环增量(步进表达式)
在一次循环体结束后,下一次循环判断条件执行之前执行。通过控制循环条件中的变量,使得循环在合适的时候结束。
2.4.3 for循环
格式:
for (初始化表达式1;布尔表达式2;步进表达式4){
循环体3;
}
执行流程: 1 2 3 4 2 3 4 2 3 4...2
流程图

课堂练习:
- 求1-100之间的偶数和
// 代表和
int sum = 0;
for (int i = 1;i <= 100;i++){
// 获取1-100之间所有的偶数
if (i % 2 == 0){
sum += i;
}
}
System.out.println(sum);
// 代表和
int sum = 0;
for (int i = 2;i <= 100;i+=2){
// 获取1-100之间所有的偶数
// if (i % 2 == 0){
sum += i;
// }
}
System.out.println(sum);
- 统计”水仙花数“有多少个
- ”水仙花数“是一个三位数,其中个位的立方+十位的立方+百位的立方 等于其本身
- 153 = 1 + 125 + 27 = 153
// 定义变量,统计个数
int count = 0;
for (int i = 100;i < 1000;i++){
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100 % 10;
if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i){
count++;
}
}
System.out.println("水仙花数有" + count + "个");
2.4.4 while循环
基本格式:
while(布尔表达式){
循环体;
}
扩展格式:
初始化表达式1;
while (布尔表达式2){
循环体3;
步进表达式4;
}
执行顺序:1 2 3 4 2 3 4 .... 2不满足为止
流程图:

- 打印100次HelloWorld
int i = 1;
while (i <= 100){
System.out.println("HelloWorld");
i++;
}
- 求1-100之间的偶数和
int i = 1;
// 定义变量,表示和
int sum = 0;
while (i <= 100){
// 判断i是否是偶数
if (i % 2 == 0){
sum += i;
}
i++;
}
System.out.println("和是" + sum);
- 统计”水仙花数“有多少个
// 统计水仙花数有多少个
int i = 100;
// 定义变量,统计个数
int count = 0;
while (i < 1000){
// 获取个位 十位 百位
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i){
count++;
}
i++;
}
System.out.println("水仙花数有" + count + "个");
2.4.5 dowhile循环
格式:
初始化表达式1;
do{
循环体3;
步进表达式4;
}while(布尔表达式2);
执行顺序:1 3 4 2 3 4 2 3 4 2 3 4...2不满足为止
- 流程图

- 打印100次HelloWorld
int i = 1;
do {
System.out.println("HelloWorld");
i++;
}while (i <= 100);
- 求1-100的偶数和
- 统计水仙花数有多少个
2.5 三种循环的区别
- dowhile循环至少会执行一次循环体
- for循环和while循环只有在条件成立的时候才会执行循环体
- for循环中的变量结束后就会回收,while和dowhile循环的变量不会被立即回收
2.6 跳转控制语句
- 概述
- 让循环在某一步的时候结束或者跳过某些数据不要这些数据。
- java提供了break和continue来实现控制语句的中断和继续
- break 中断
- continue 继续
break:立即结束当前循环
for (int i = 1;i <= 10;i++){
if (i == 3){
break;// 立即结束当前循环
}
System.out.println("记得吃早餐" + i);
}
continue:跳过本次循环,继续下一次循环
for (int i = 1;i <= 10;i++){
if (i == 3){
continue;// 跳过本次循环,继续下一次循环
}
System.out.println("记得吃早餐" + i);
}
循环是可以嵌套的
在多层循环中,break和continue只针对于离它们最近的循环
for (int i = 1;i <= 10;i++){
System.out.println("i = " + i);
for (int j = 1;j <= 10;j++){
System.out.println("j = " + j);
if (j == 2){
break;
}
}
}
2.7 死循环
如果一个循环的条件永远是true,就称之为死循环,也称之为叫永真循环、无限循环
// while (true){}
// for(;true;){}
for(;;){}
打印99乘法表
package cn.javasm.test;
public class TestDemo5 {
public static void main(String[] args) {
System.out.println("九九乘法表:");
for(int i = 1;i <= 9;i++){
for(int j = 1;j <= i;j++){
System.out.print(j + "x" + i + "=" + i * j + "\t");
}
System.out.println();
}
}
}

浙公网安备 33010602011771号