流程控制语句
1.概述
在一个程序执行的过程中,各条语句的执行顺序对程序对的结果是有直接影响的,所以我们必须清楚每条语句的执行流程。流程控制语句就可以控制代码的置信顺序。
分类:
- 顺序结构
- 选择(分支)结构
- 循环结构
2.循环结构
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序一次执行。
流程图:

3.选择结构
3.1概述
- 选择结构也称之为分支结构
- 选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
- Java语言提供了两种分支结构的语句
- if语句
- switch语句
3.2if语句
if语句分为三种格式
3.2.1格式一
if(布尔表达式){
语句体;
}
- 执行流程
- 首先判断布尔表达式的结果是true还是false
- 如果是true就执行语句体
- 如果是false就不执行语句体
- 流程图

- 注意:当if语句中只有一行代码时,{}可以省略
public static void main(String[] args) {
System.out.println("晚上没事出去溜达");
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("回家睡觉");
}
3.2.2格式二
格式:
if(布尔表达式){
语句体1;
}else{
语句体2;
}
- 执行流程
- 首先判断布尔表达式的结果是true还是false
- 如果是true就执行语句体1
- 如果是false就执行语句体2
- 流程图

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

public static void main(String[] args) {
System.out.println("请输入您的年龄");
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 < 30){
System.out.println("青年");
}else if (age >= 30 && age < 60){
System.out.println("中年");
}else if (age >= 60 && age < 120){
System.out.println("老年");
}else {
System.out.println("老登");
}
}
课堂练习
1:x和y满足如下:
x >= 3 y = 2x
-5< x < 3 y = 2x + 1
x <= -5 y = 2x - 1
输入x的值,计算出y的值并输出
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数x:");
double num = scanner.nextDouble();
double result=0;
if(num>=3)
result = 2*num;
else if(num>-5&&num<3)
result =2*num+1;
else
result =2*num-1;
System.out.println("y的值为:"+result);
2:用户输入对应的月份,输出对应的季节
3 4 5 春天
6 7 8 夏天
9 10 11 秋天
12 1 2 冬天
Scanner scanner = new Scanner(System.in);
System.out.println("请输入当前的月份:");
int month = scanner.nextInt();
if (month >= 3 && month <= 5)
System.out.println("当前是春天!");
else if (month >= 6 && month <= 8)
System.out.println("当前是夏天!");
else if (month >= 9 && month <= 11)
System.out.println("当前是秋天!");
else
System.out.println("当前是冬天")
3.3 switch语句
- 格式
switch(表达式){
case 目标值1:
语句体1;
break;
case 目标值2:
语句体2;
break;
case 目标值3:
语句体3;
break;
...
case 目标值n:
语句体n;
break;
default:
语句体n+1;
break;
}
- 格式解释
- switch表示这是switch语句
- 表达式取值类型:byte、short、int、char
- JDK5之后可以是枚举
- JDK7之后可以是String
- case后面跟的是要和表达式比较的值
- 语句体就是一条或者多条语句
- break表示中断、结束的意思。可以立即结束switch语句
- default语句表示所有情况都不匹配的时候,就执行该处内容
- 执行流程
- 首先计算出表达式的值
- 然后case一次进行比较,一但有对应的值,就会执行相应的语句。在执行的过程中,遇到break就会结束
- 如果所有的case都和表达式不匹配,就会执行default语句体的部分的内容
- 注意点:
- default的break如果在代码的最后,就可以省略
- switch中的语句,顺序不影响最终的结果
- case和default具有穿透效果,如果没有break的影响,那么就会一直向下执行
public static void main(String[] args) {
// 根据用户输入的值1,2,3...7 输出对应的周几
Scanner scanner = new Scanner(System.in);
int weekDay = scanner.nextInt();
switch (weekDay) {
default:
System.out.println("输入有误");
case 1:
System.out.println("周一最辛苦");
case 5:
System.out.println("这天最开心");
case 2:
System.out.println("周二最普通");
break;
case 3:
System.out.println("周三坚持一半");
break;
case 7:
System.out.println("洗衣服准备上班");
break;
case 4:
System.out.println("周四吃饺子");
break;
case 6:
System.out.println("轻松玩一天");
break;
}
课堂练习:
用户输入对应的月份,输出对应的季节,使用switch语句编写
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int month = scanner.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;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt();
switch (month){
case 3, 4, 5:
System.out.println("春天");
break;
case 6 ,7 ,8:
System.out.println("夏天");
break;
case 9,10,11:
System.out.println("秋天");
break;
case 12,1,2:
System.out.println("冬天");
break;
default:
System.out.println("输入有误");
break;
}
}
JDK17特性
public static void main(String[] args) {
// 输入对应的城市名,获取对应的省份
Scanner scanner = new Scanner(System.in);
String cityName =scanner.next();
// 如果case中只有一行代码,可以不写{} 如果有多行代码需要写上{}
// 并且值需要使用关键字yield修饰
String provinceName = switch (cityName){
case "郑州","洛阳","开封" -> {
System.out.println("老家河南");
System.out.println("可以润两次");
yield "河南省";
}
case "成都","绵阳" -> "四川省";
default ->"山东省";
};
System.out.println(provinceName);
}
4循环结构
4.1概述
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段重复执行的代码称之为循环体语句。
4.2循环语句的组成
- 初始化表达式
- 一条或者多条语句,这些语句完成初始化操作
- 布尔表达式
- 如果是true就继续循环,如果是false就结束循环
- 循环体语句
- 就是需要重复执行的代码
- 步进表达式
- 再一次循环结束后,下一次循环判断条件执行前执行。通过控制循环条件中的变量,使得循环在合适的时候结束。
4.3 for循环
- 格式
for (初始化表达式1;布尔表达式2;步进表达式4){
循环体语句3
}
- 执行流程
- 执行顺序1 2 3 4 2 3 4 2 3 4…2不满足为止
- 流程图

public static void main(String[] args) {
// 循环100次HelloWorld
// for (int i = 1;i <= 100;++i){
// System.out.println("HelloWorld" + i);
// }
//
// // 打印5 - 1
// for (int i = 5;i >= 1;i--){
// System.out.println(i);
// }
// 求1-100之间的偶数和
// 定义变量代表和
// int sum = 0;
// for (int i = 1;i <= 100;i++){
// // 判断i是否是偶数
// if (i % 2 == 0){
// sum += i;
// }
// }
// System.out.println("1-100的偶数和是" + sum);
// int sum = 0;
// for (int i = 2;i <= 100;i += 2){
// sum += i;
// }
// System.out.println("1-100的偶数和是" + sum);
// 统计所有的"水仙花数"有多少个
// "水仙花数"是一个三位数,其中个位的立方 + 十位的立方 + 百位的立方 = 自身
// 153 = 3 * 3 * 3 + 5 * 5 * 5 + 1 = 27 + 125 + 1 = 153
// 定义变量代表计数器
int count = 0;
for (int i = 100;i < 1000;i++){
// 获取到所有的三位数
// 获取个位
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++;
}
}
System.out.println("水仙花数有" + count + "个");
}
4.4while循环
- 基本格式
while(布尔表达式){
循环体语句;
}
- 扩展格式
初始化表达式1;
while (布尔表达式2){
循环体语句3;
步进表达式4;
}
- 执行流程
- 执行顺序1 2 3 4 2 3 4 2 3 4 …2不满足为止
- 流程图

public static void main(String[] args) {
// for (int i = 1;i <= 100;i++){
// System.out.println("HelloWorld");
// }
// 输出100次HelloWorld
// int i = 1;
// while (i <= 100){
// System.out.println("HelloWorld");
// i++;
// }
// 求1-100的和
// int i = 1;
// int sum = 0;
// while (i <= 100){
// 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 + "个");
Scanner scanner = new Scanner(System.in);
// 使用while循环 如果用户输入的是y 就继续循环 如果不是y就结束循环
String str = "y";
while ("y".equals(str)){
System.out.println("是否要继续?y/n");
str = scanner.next();
}
}
4.5 do while 循环
- 基本格式
do{
循环体语句;
}while(布尔表达式);
- 扩展格式
初始化表达式1;
do{
循环体语句3;
步进表达式4;
}while(布尔表达式2);
- 执行流程
- 执行顺序1 3 4 2 3 4 2 3 4 …2不满足为止
- 流程图

public static void main(String[] args) {
// 打印100行HelloWorld
// int i = 1;
// do {
// System.out.println("HelloWorld");
// i++;
// }while (i <= 100);
// 使用dowhile实现是否继续功能
Scanner scanner = new Scanner(System.in);
String str;
do {
System.out.println("是否要继续?y/n");
str = scanner.next();
}while ("y".equals(str));
}
4.6三种循环的区别
dowhile循环中的语句体至少会执行一次,for循环和while循环有可能不会执行
for循环中的变量出了循环就没有了,但是while和dowhile循环中的控制变量出了循环后还会存在
public static void main(String[] args) {
for (int i = 1;i > 10;i++){
System.out.println("HelloWorld");
}
int i = 1;
do {
System.out.println("HelloWOrld");
i++;
}while (i > 10);
}
4.7跳转控制语句
- 概述
让循环在某一步的时候结束或者跳过某些数据不要这些数据,就可以使用跳转控制语句
break 中断
continue 继续
- break
- 可以在switch语句中使用
- 可以在循环语句中使用
- continue
- 可以在循环语句只能使用
循环是可以嵌套的,break和continue只会针对于离他们最近的循环
public class TestDemo14 {
public static void main(String[] args) {
// for (int i = 1;i <= 10;i++){
// if (i == 3) {
// break;// 会立即结束整个循环
// }
// System.out.println("记得穿秋裤");
// }
// for (int i = 1;i <= 10;i++){
// if (i % 3 == 0){
// continue;// 结束本次循环,继续下一次循环
// }
// System.out.println("第" + i + "层到了,请下楼梯");
// }
for (int i = 1;i <= 5;i++){
System.out.println("i = " + i);
for (int j = 1;j <= 5;j++){//循环的嵌套
if (j == 2) break;
System.out.println("j = " + j);
}
}
for (int i = 1;i < 10;i++){
while (true){
do {
}while (true);
}
}
}
}
4.8死循环
死循环也称之为永真循环,无限循环。循环条件永远都是true,循环不会停止
public static void main(String[] args) {
// while (true){} 推荐
for (;;){}
}
课堂练习
- 请输出1-100之间满足如下条件的数字
对3取余得2
对5取余得3
对7取余得2
Scanner scanner = new Scanner(System.in);
boolean logo = false;
for (int i = 1; i <= 100; i++) {
if ((i % 3 == 2) && (i % 5 == 3) && (i % 7 == 2)) {
System.out.println("数字" + i + "符合");
logo = true;
}
}
if (logo == false)
System.out.println("没有符合的数!");
- 百钱买百鸡:3文钱可以买一只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100文钱买100只鸡,那么可以有公鸡,母鸡,小鸡多少只?
Scanner scanner = new Scanner(System.in);int count=0;
for(int i =0;i<=100/3;i++){
for(int j =0;j<=100/2;j++){
int k=100-i-j;
if((i*3+j*2+k/3==100)&&(k%3==0)) {
System.out.println("公鸡有" + i + "只," + "母鸡有" + j + "只," + "小鸡有" + k + "只");
count++;
}
}
}
System.out.println("共有方法"+ count+"种");
}
- 打印九九乘法表
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();
}
课后作业
package smjava.homework1106;
import javax.annotation.processing.SupportedAnnotationTypes;
import java.util.Scanner;
public class HomeWork {
public static void main(String[] args) {
//1.现要求⽤户输⼊两个数a、b,如果a能被b整除或a加b⼤于1000,则输出a,否则输出b
Scanner scanner = new Scanner(System.in);
System.out.println("输入两个数:");
int num1_1=scanner.nextInt();
int num1_2=scanner.nextInt();
if(num1_1%num1_2==0||num1_1+num1_2==1000)
System.out.println(num1_1);
else
System.out.println(num1_2);
// 2.动态录⼊3个数,请使⽤条件结构/三元运算符求3个数的最值
System.out.println("请输入三个数:");
double num2_1 = scanner.nextDouble();
double num2_2 = scanner.nextDouble();
double num2_3 = scanner.nextDouble();
double max=(num2_1>num2_2)?num2_1:num2_2;
if(max>num2_3)
System.out.println("最大值为:"+max);
else{
max= num2_3;
System.out.println("最大值为:"+max);
}
// 3. 输⼊⼀个数,判断它是否能被3、5、7整除,注意考虑同时整除的情况
System.out.println("请输入一个数:");
double num3_1= scanner.nextDouble();
if((num3_1%3==0)&&(num3_1%5==0)&&(num3_1%7==0))
System.out.println("请输入的数能同时被3、5、7整除!");
else
System.out.println("您输入的数不能同时被3、5、7同时整除!");
//4.超市为了促销,规定:购物不⾜50元的按原价付款,超过50不⾜100的按九折付款,超过100元的,
// 超过部分按⼋折付款。编程序完成超市的⾃动计费的⼯作。
double num4_1= scanner.nextDouble();
double priceNum=0;
if(num4_1<50)
priceNum = num4_1;
else if (num4_1>=50&&num4_1<=100)
priceNum=num4_1*0.9;
else
priceNum=(num4_1-100)*0.8+100* 0.9;
System.out.println("最终的价格为:" + priceNum);
/*
5.商场实⾏新的抽奖规则:会员号的百位数字等于产⽣的随机数字即为幸运会员。实现如下功能:
1、从键盘接收4位数会员号
2、⽣成随机数
提示:int random = (int) (Math.random() * 10);
3、算出会员号中在百位的数字号码
提示:int baiwei = custNo / 100 % 10;
*/
System.out.println("请输入你的四位数会员号:");
int vipNum= scanner.nextInt();
int luckyNum=(int)(Math.random()*10);
int vipLuckyNum = vipNum/100%10;
System.out.println("luckyNum是:"+luckyNum);
System.out.println("你的会员号的百位数是:"+vipLuckyNum);
if (luckyNum==vipLuckyNum)
System.out.println("恭喜你中奖了!");
else
System.out.println("很遗憾您没有中奖!");
//循环作业
/* 1.
要求⽤户输⼊⼀个0到2之间的整数 如果⽤户输⼊0输出“你出的是⽯头”,如果⽤户输⼊1就输出“你出的是剪⼑”,
如果⽤户输⼊的是2就输出“你出的是布”,然后再问是否要继续出拳,如果回答“y”就重复以上过程,否则结束程序
*/
/* int num1_1;
String str;
do{
System.out.println("请输入一个0-2之间的整数:");
num1_1 = scanner.nextInt();
switch (num1_1){
case 0:
System.out.println("你出的是石头!");
break;
case 1:
System.out.println("你出的是剪刀!");
break;
case 2:
System.out.println("你出的是布!");
break;
default:
System.out.println("输入错误!");
}
System.out.println("是否继续出圈?y/n:");
str= scanner.next();
}while(str.equals("y"));*/
// 2.求1到100之间所有能被3整除的整数的总和
int sum=0;
for(int i=1;i<=100;i++){
if(i%3==0)
sum+=i;
}
System.out.println("1-100之间所有能被3整除的整数的总和为:"+sum);
/* 3. 打印出所有的 "⽔仙花数"
所谓 "⽔仙花数"是指⼀个三位数,其各位数字⽴⽅和等于该数本身。
例如:153是⼀个 "⽔仙花数 ",因为153=1的三次⽅+5的三次⽅+3的三次⽅。*/
for (int i = 100; i <= 999; i++) {
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
if (Math.pow(ge, 3) + Math.pow(shi, 3) + Math.pow(bai, 3) == i)
System.out.println(i);
}
// 4.计算⽤户输⼊的⽇期离1900年1⽉1⽇相距多少天
System.out.println("请输入年份:");
int year= scanner.nextInt();
System.out.println("请输入月份:");
int month = scanner.nextInt();
System.out.println("请输入哪一天:");
int day= scanner.nextInt();
int sum_days=0;
for(int i=1900;i<=year-1;i++) {
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
sum_days += 366;
else
sum_days += 365;
}
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
for (int j = 1; j <= month - 1; j++) {
switch (j) {
case 1, 3, 5, 7, 8, 10, 12:
sum_days += 31;
break;
case 4, 6, 9, 11:
sum_days += 30;
break;
default:
sum_days += 29;
break;
}
}
}else{
for (int j = 1; j <= month - 1; j++) {
switch (j) {
case 1, 3, 5, 7, 8, 10, 12:
sum_days += 31;
break;
case 4, 6, 9, 11:
sum_days += 30;
break;
default:
sum_days += 28;
break;
}
}
}
sum_days+=(day-1);
System.out.println("您输入的日期距离1900-1-1这天相距"+sum_days+"天");
/* 5.请⽤程序接收⼀个三位数,然后打印出所有0到这个数之间 带3和3的倍数的数
例如有99 , 96 , 93 , 90 , 87 , 84 , 83 , 81 , 78 , 75 , 73 , 72.......等等
*/
int num=scanner.nextInt();
for(int i=0;i<=num;i++){
if(i>=0&&i<=9&&(i%3==0||i==3))
System.out.println(i);
else if(i>=10&&i<=99&&(i%10==3||i/10==3||i%3==0))
System.out.println(i);
else if(i>=100&&i<=num&&(i%10==3||i/10%10==3||i/100==3||i%3==0))
System.out.println(i);
}
}
985

被折叠的 条评论
为什么被折叠?



