目录
流程控制语句
-
Java提供了一些流程控制语句,来控制程序和执行流程
分支结构
if 分支
-
根据判断的结果(真或假)决定执行某个分支的代码
if 分支的三种格式
格式1
if(条件表达式){
语句体;
}
int a = 5;
int b = 3;
if(a > b){
a = 10;
b = a;
}
流程图

格式2
if(条件表达式){
语句体1;
} else {
语句体2
}
int a = 5;
int b = 3;
if(a > b){
a = 10;
}else {
b = 10;
}
流程图

格式3
if (条件表达式1){
语句体1;
} else if (条件表达式2){
语句体2;
} else if (条件表达式3){
语句体3;
}
.....
else {
语句体n+1;
}
格式1应用:
// 判断心跳数据, 心跳小于60 或者大于100 表示有问题
int x = 130; // 定义心跳数据
if (x < 60 || x > 100) { // if 进行流程控制,如果x < 60 或者 大于100, 执行{}内的语句
System.out.println("心跳数据是:" + x + ",您的心跳有问题,建议做进一步检查!");
}
System.out.println("检查结束!");
-
如果if 语句中只有一条语句时,则可以省略{ }, 建议不要省略.
// 判断心跳数据, 心跳小于60 或者大于100 表示有问题
int x = 130; // 定义心跳数据
if (x < 60 || x > 100) // 可以省略括号,运行结果与上方一样
System.out.println("心跳数据是:" + x + "您的心跳有问题,建议做进一步检查!");
System.out.println("检查结束!");
上面两条语句输出结果为:
心跳数据是:130,您的心跳有问题,建议做进一步检查!
检查结束!
格式2应用:
// 发红包,给你的女朋友发送1314的大红包
double money = 1313; // 定义钱数
// 发送1314
if (money >= 1314) { // 判断钱是否大于等于1314
System.out.println("发送成功~~~~~");
} else { // 如果不等于,则输出下面{}内的内容
System.out.println("莫得钱了.....好凄惨~");
}
输出结果为:
莫得钱了.....好凄惨!
格式3应用:
// 判断分数级别
// 0 - 60 不及格 60 - 80 及格 80 - 90 良好 90-100 优秀
int score = 99; // 定义分数
if (score >= 0 && score < 60) { // 大于等于0 并且 小于 60
System.out.println("不及格");
} else if (score >= 60 && score < 80) { // 大于等于 60 并且 小于 80
System.out.println("及格");
} else if (score >= 80 && score < 90) { // 大于等于 80 并且 小于 90
System.out.println("良好");
} else if (score >= 90 && score <= 100) { // 大于等于90 并且 小于等于100
System.out.println("优秀");
} else { // 如果以上条件都不满足,则执行这条语句
System.out.println("请输入正确的分数!");
}
输出结果为:
优秀
switch分支
-
也是匹配条件去执行分支,适合做值匹配的分支选择,结构清晰,格式良好
-
格式:
switch ( 表达式 ) {
case 值1:
执行代码..;
break;
case 值2:
执行代码..;
break;
case 值3:
执行代码..;
break;
.....
case 值n-1:
执行代码..;
break;
default:
执行代码n;
// break; 可写可不写
}
-
执行流程
1.先执行表达式的值,拿着这个值去与case后的值进行匹配
2.匹配哪个值为true 就执行哪个case,遇到break就跳出switch分支
3.如果case后的值都不匹配则执行default代码
案例:
// 判断今天是星期几
int xq = 5; // 定义今天为星期五
switch (xq) { // 将值传给switch
case 1: // 判断是否为1
System.out.println("星期一");
break; // 如果为1 ,则跳出switch语句
case 2: // 判断是否为2
System.out.println("星期二");
break;
case 3: // 判断是否为3
System.out.println("星期三");
break;
case 4: // 判断是否为4
System.out.println("星期四");
break;
case 5: // 判断是否为5
System.out.println("星期五");
break;
case 6: // 判断是否为6
System.out.println("星期六");
break;
case 7: // 判断是否为7
System.out.println("星期日");
break;
default: // 如果上面没有匹配的值,则输出以下语句
System.out.println("输入信息有误!");
}
-
注意:如果不写break 则会出现穿透现象,从匹配的值位置一直执行到最后
写break执行的结果:
星期五
不写break执行的结果:
星期五
星期六
星期日
输入信息有误!
// String 格式
String xq = "星期一";
switch (xq){
case "星期一":
System.out.println("今天是星期一");
break;
case "星期二":
System.out.println("今天是星期二");
break;
case "星期三":
System.out.println("今天是星期三");
break;
case "星期四":
System.out.println("今天是星期四");
break;
case "星期五":
System.out.println("今天是星期五");
break;
case "星期六":
System.out.println("今天是星期六");
break;
case "星期日":
System.out.println("今天是星期日");
break;
default:
System.out.println("输入信息有误!");
}
switch分支注意事项:
-
表达式类型只能是
byte , short , int , char, JDK5开始支持枚举,JDK7开始支持String, 不支持double,float , long. -
case给出的值不允许重复,且只能是字面量,不能是变量
-
不要忘记写break,否则会出现穿透现象
switch 穿透性
-
如果代码执行到没有写break的case块,执行完后直接进入下一个case块执行代码(而且不会进行任何匹配),直到遇到break才能跳出分支,这就是switch穿透性
switch ( 表达式 ) {
case 值1:
执行代码1..;
case 值2:
执行代码2..;
case 值3:
执行代码3..;
.....
case 值n-1:
执行代码n-1..;
break;
default:
执行代码n;
}
案例
// 需求输入月份可以展示该月份的天数
// 1 3 5 7 8 10 12月份为31天
// 2月份闰年29天平年28天
// 4 6 9 11 月份是30天
int month = 7;
switch (month) {
case 1: // 根据穿透性,因为结果都一样,所以一直往下走直到碰到break才停止
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month + "月是31天!");
break;
case 2:
System.out.println(month + "月为闰年29天,平年28天!");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(month + "月是30天!");
break;
default:
System.out.println("数据有误!");
}
循环结构
for循环
-
控制一段代码返回执行多次
格式
for (初始化语句; 循环条件;迭代语句){
循环体语句(重复执行的代码);
}
-
for语句的第一部分通常是对数据的初始化,第二部分给出每次新一轮循环执行前要检测的循环条件,第三部分指定如何更新数据
-
for语句的三个部分应该对同一个数据变量进行初始化,检测和更新,若不遵守这个规则,编写的循环会很难懂
-
如果在for循环内部定义一个变量,这个变量就不能在循环体外使用
示例
// 输出123
for ( int i = 1 ; i <= 3 ; i++){
System.out.println(i);
}
执行流程

案例
求和
需求
-
求1-5之间的数据和,并把结果在控制台输出
分析
-
首先定义一个变量用来累加数据
-
其次定义一个可以访问1-5的for循环
-
最后打印数据
int sum = 0; // 累加数据变量
for (int i = 1 ; i <= 5 ; i++){ // 定义 可以访问1 - 5的for 循环
sum += i; // 将i的值赋给sum,依次累加
/*
等价于 sum = sum + i;
i == 1 sum = 0 + 1
i++
i == 2 sum = 1 + 2
i++
i == 3 sum = 3 + 3
i++
i == 4 sum = 6 + 4
i++
i == 5 sum = 10 + 5
*/
System.out.println("1 - 5的和为:" + sum); // 打印结果
}
求奇数和
需求
-
求1- 10 之间的奇数和,并把求和结果在控制台输出
分析
方式一:
-
定义for循环使其能够访问到: 1 - 10之间的奇数
-
在for循环中,通过if筛选除奇数
-
在循环外定义一个整数变量sum用来累加这些数据
int sum = 0;
for (int i = 1 ; i <= 10 ; i++){
if (i % 2 == 1){ // 通过if语句筛选,求余数,因为如果余数为1,一定是奇数
sum += i;
}
}
System.out.println(sum);
方式二:
-
定义for 循环使其能访问到1-10 之间的奇数,通过i+=2的方式来排除偶数
-
在循环外定义一个整数变量sum用来累加这些数据
int sum = 0;
for (int i = 1 ; i <= 10 ; i+=2){ // i += 2, 因为最开始i = 1,所以i += 2 只能为奇数
sum += i;
}
System.out.println(sum);
水仙花数
需求
-
在控制台输出所有的“水仙花数”,水仙花数必须满秩两个要求:
-
水仙花数是一个三位数
-
水仙花数个位,十位,百位的数字立方和等于原数(原来的数字)
-
分析
-
定义一个for循环,从100 -- 999.
-
每次访问数据后,提取该数据的 个位, 十位,百位数字
-
使用if判断:个位,十位,百位的数字立方和是否等于原数,等于则输出该数据
for (int i = 100; i <= 999; 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){ // 判断个位十位百位的立方加一起是否等于他本身
System.out.print(i + " ");
}
}
while循环
-
当条件为true时,while循环执行一条语句(也可以是一个块语句),如果开始时循环条件的值为false,那么while循环一次也不执行
while循环格式
初始化语句;
while ( 循环条件 ){
循环体语句(被重复执行的代码);
迭代语句;
}
示例
// 输出 0 - 2
int i = 0;
while ( i < 3 ){
System.out.println(i);
i++;
}
执行流程

案例
需求
-
珠穆朗玛峰为(8848.86米 = 8848860毫米),假如有一张足够大的纸,他的厚度是0.1毫米,请问,折叠多少次,可以折成珠穆朗玛峰高度?
思路
-
不清楚要循环多少次的情况,可以使用while循环实现
分析
-
定义一个变量存储珠穆朗玛峰的高度,和纸张的高度
-
使用while循环, 循环条件是(纸张厚度<山峰高度),内部控制纸张折叠,每折叠依次,纸张厚度为原来的两倍,循环定义计数变量,每折叠一次,变量+1
double zm = 8848860; // 山峰高度(毫米数)
double zz = 0.1; // 纸张厚度
int count = 0;
while (zz < zm) { // 如果纸张厚度大于山峰高度,则循环结束
zz *= 2; // 纸张厚度每次*2
count++; // 计数
}
System.out.println("折叠的次数:" + count); // 27
do-while循环
-
先执行在判断循环条件,如果为true,就重复执行语句,然后再次检测循环条件
格式
初始化语句;
do {
循环体语句;
迭代语句;
}while(循环条件);
示例
// 输出 0 - 2
int i = 0;
do {
System.out.println(i);
i++;
}while(i<3);
-
do - while循环的特点:一定会先执行一次循环体

三种循环区别
-
for循环 和while循环(先判断后执行)
-
do... while(第一次先执行后判断)
for和while 区别
-
for循环和while循环的执行流程是一模一样的
-
如果已知循环次数建议使用for 循环,如果不清楚循环多少次建议使用while循环
-
for循环中,控制循环的变量只能在循环中可以使用,while循环中,控制循环的变量在循环后还可以使用
死循环
-
一直循环执行下去,如果没有干预不会停止下来
写法
for(;;){
System.out.println("Hello World");
}
// 经典做法
while (true){ // 因为一直为真所以会一直循环
System.out.println("Hello World");
}
do{
System.out.println("Hello World");
} while(true);
案例
密码验证
需求:系统密码是520,请用户不断输入密码验证,验证不对输出密码错误,验证成功输出欢迎进入系统,并停止程序
分析
-
使用while死循环,让用户不停的输入数据
-
与密码比对,验证不成功输出密码错误
-
验证成功输出欢迎进入系统,并使用break结束当前循环的执行
Scanner in = new Scanner(System.in);
// 定义密码
int password = 520;
// 定义死循环,让用户不断输入
while (true){
System.out.println("请输入正确的密码:");
int passwords = in.nextInt();
if(passwords == password){ // 判断是否输入成功
System.out.println("登录成功!");
break; // 跳出循环
}else{
System.out.println("密码错误请重新输入!");
}
}
循环嵌套
-
循环中又包含循环
for (int i = 0; i <3; i++) {
for (int j = 0; j < 5; j++) {
System.out.println("123");
}
}
-
外部循环每循环一次,内部循环全部执行完一次
案例
需求
-
在控制台使用*打印出4行5列的矩形

for (int i = 0; i <4; i++) {
for (int j = 0; j < 5; j++) {
System.out.print("*");
}
System.out.println();
}
跳转关键字:break , continue
跳转控制语句介绍
-
break : 跳出并结束当前所在循环的执行
-
continue : 用于跳出当前循环的当次执行,进入下一次循环
注意:
-
break: 只能用于结束所在循环,或者结束所咋switch分支的执行
-
continue : 只能在循环中进行使用
跳转关键字的使用
// 每周七天,前五天快乐的学习,周六周天放假,不用学习
for (int i = 1; i <= 7; i++) {
System.out.println("快乐的学习!");
if (i == 5){
break; // 跳出本次循环
}
}
System.out.println("-----------");
// 学校决定周三放一天假,然后整个星期都要上课
for (int i = 1; i <= 7; i++) {
if (i == 3){
continue; // 跳出当前循环,继续执行下一次循环
}
System.out.println("快乐的学习!" + i);
}
输出结果:
快乐的学习!
快乐的学习!
快乐的学习!
快乐的学习!
快乐的学习!
-----------
快乐的学习!1
快乐的学习!2
快乐的学习!4
快乐的学习!5
快乐的学习!6
快乐的学习!7
随机数Random类
Random的使用
-
作用:用于在程序中获取随机数的技术
使用步骤:
-
导包
-
写一行代码代表得到随机数的对象
-
调用随机数的功能获取0-9的随机数
import java.util.Random; // 导包
public class Main {
public static void main(String[] args) {
Random r = new Random(); // 获取随机数对象
int number = r.nextInt(10); // 调用获取0-9的随机数
System.out.println("随机生成数字为:" + number);
}
}
注意
-
nextInt(n)功能只能生成:0 至 n-1之间的随机数,不包含n
Random生成随机数的特点
-
nextInt(n)功能只能生成:0 至 n-1之间的随机数
Random生成区间随机数的技巧:减加法
-
如果要生成1-10之间的随机数,程序怎么实现?
1 - 10 --> -1 --> (0-9)+1
Random r = new Random(); // 获取随机数对象
int number = r.nextInt(10)+1; // 调用获取1-10的随机数
-
Random随机数如何生成 65 - 91 之间的随机数?
65 - 91 => (0 - 26) + 65 // 先用91减去65得到26,然后再加65
int number = r.nextInt(27)+65; // 通过(0-26)+65 得到65-91之间的随机数
猜数字游戏
-
需求
-
随机生成一个1-100之间的数据,提示用户猜测,猜大提示猜大了,猜小提示猜小了,直到猜中结束游戏
-
-
分析
-
随机生成一个1-100之间的数据
-
使用死循环让用户不断提示用户猜测,,猜大提示猜大了,猜小提示猜小了,直到猜中结束游戏
-
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Random r = new Random(); // 获取随机数对象
int cs = r.nextInt(100)+1; // 千万不要把随机生成的数字写在循环中,否则你输入一次,随机数变一次
while (true){ // 定义死循环
System.out.println("请输入你要猜的数字(1-100):");
int cai = in.nextInt(); // 用户输入数字
if (cai == cs){ // 判断是否相等
System.out.println("恭喜你猜中了!");
break; // 猜中退出循环
}else if (cai > cs){ // 判断用户输入的数是否大于随机数
System.out.println("猜大了!");
}else { // 因为三种情况两种已经出现了,所以最后一个必定是小于,直接else就可以
System.out.println("猜小了!");
}
}
}
}
总结
1,if , switch 分支各自适合做什么业务场景?
-
if在功能上远远强大与switch
-
if 适合做区间匹配
-
switch 适合做:值匹配的分支选择,代码优雅
3.什么情况下会出现switch穿透现象?
-
case 中没有写break;
3.switch穿透性能解决什么问题?
-
存在多个case分支的功能代码是一样时,可以使用穿透性把流程集中到同一处处理,处理可以简化代码
4.什么时候用for循环,什么时候用while循环?
-
功能上是完全一样的,for能解决的while也能解决
-
使用规范是:知道循环几次:使用for; 不知道循环几次建议使用:while
思维导图

笔记文件链接
链接:https://pan.baidu.com/s/1CW7In2WiKHN28faQCvh0aw?pwd=cyzz
提取码:cyzz
Java流程控制与循环结构详解
本文详细介绍了Java中的流程控制语句,包括if分支、switch分支、循环结构(for、while、do-while)及其区别。通过案例展示了如何使用这些结构实现条件判断和循环操作,如求和、判断奇数和水仙花数。此外,还讲解了break和continue的使用,以及Random类在生成随机数中的应用。内容深入浅出,适合初学者掌握Java控制流程的基础知识。
1558

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



