对应网课为:【黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关】
项目代码地址如下(如果对你有帮助请给我一个免费的star):
gitcode链接(无需梯子)https://gitcode.com/CherryTaylor/AboutJava_first
github链接https://github.com/CarrieChai/AboutJava_first
Day03-程序流程控制
程序有三种执行顺序:顺序结构、分支结构和循环结构
- 顺序结构:自上而下的执行程序,一般比如连续三行的打印函数就是自上而下执行
- 分支结构:根据条件,选择对应的代码进行执行(if switch)
- 循环结构:控制某段代码重复执行(for while do-while)
一 分支结构
1 if分支结构
Day03 IfDemo1 IfTest2
if分支结构可以根据条件,选择执行某段程序
if分支有三种写法
一 判断条件 满足则执行语句
二 判断条件 满足则执行语句A 否则执行语句B
三 判断条件1 满足则执行语句A 否则判断条件2 满足则执行语句B 否则判断条件3……

2 switch 分支结构
通过比较值是否相等,来决定执行哪条分支 Day03-SwitchDemo2和SwitchDemo3

先执行表达式的值,然后用这个值与case之后的值进行匹配
与哪个case之后的值匹配就执行对应的case块的代码,遇到break就跳出分支
如果全都不匹配,就执行default
注意:
- 如果不写break的话,代码就会从找到匹配的case值执行对应的case代码块和下面 case 对应的代码块(如果一直没有break 那么default里的也会执行),直到遇到break或者执行完整个switch代码块【叫做switch的穿透性】
- 另外 default里的代码是当所有值都不匹配的时候才会执行
- case之后的值只能是字面量 不能是变量
- case之后的值不能重复
- switch表达式类型只能是byte、short、int、char、JDK5开始支持枚举、JDK7开始支持String,不支持double、float、long(因为Java浮点数的表示存在精度问题,可能会导致不精确的比较结果 可以用if语句来判断)
switch的穿透性有时候也可以有正面作用,比如某几个case值需要执行的代码一致,那么就可以写在一起
switch(表达式){
case 值1:
case 值2:
case 值3:
执行代码(三个值的操作相同);
break;
case 值4:
执行值4代码;
break;
...
default:
执行default代码块;
}
一个具体例子如下
public static void test2(){
String day = "tuesday";
switch(day){
case "monday":
case "tuesday":
case "wednesday":
case "thursday":
case "friday":
System.out.println("go to school");
break;
case "saturday":
case "sunday":
System.out.println("go home");
break;
default:
System.out.println("error");
}
}
这段代码中,输入的值是周内,就都是去上学,是周末,就都是回家。
if 与 switch的比较:
- if在功能上更强大
- 当条件是区间的时候,一般用if分支实现
- 当条件是一个一个的值来比较的时候,一般用switch(格式良好、性能较好、代码优雅)
- 性能好主要体现在switch表达式的值与case之后的值进行匹配的时候 switch是拿出表达式的值 一次性和所有case之后的值比较 而if是一个一个比较过去
二 循环结构
循环结构的目的是 为了减少代码的重复编写 灵活控制程序的执行
for循环
执行流程如下 Day03 ForDemo01ForDemo02

项目一 1~n求和
思路:
- 1~n求和本质上就是 1+2+…+n
- 首先要有一个变量sum用于保存求和结果
- 其次可以用循环体中计数的i作为一个个被加数(因为i也是从1、2、3…开始慢慢累计的)
- 在循环中计算累加 循环体可以是 sum+=i
- 最后返回sum的值即可

while的循环
功能与for类似,while循环结构如下 Day03 WhileDemo3

while循环语句和for循环语句的功能是一致的,二者可以替换使用
但是一般来说,直到循环几次(也就是循环条件里有迭代语句的变量)用for,不知道循环几次(一般就是迭代语句和循环条件是两个变量)用while
- 案例一 已知本金10万,年复利1.7%,问几年后实现本金翻倍
- 案例二 已知世界上最高峰珠穆朗玛峰高度是8848.86m = 8848860mm,假如一张纸厚度0.1mm
---- 问1多少张这样的纸摞在一起可以达到珠穆朗玛峰的高度
---- 问2如果这张纸足够大 折叠多少次可以达到珠穆朗玛峰的高度
do-while循环
与for和while不同,do-while是先执行,后判断Day03 DoWhileDemo4

三种循环中,for和while可以相互替换,区别是由于for循环的迭代变量是在for循环内部定义的,所以for循环结束后这个变量就不能再使用了(所以可以重复使用这个变量名),而while的迭代变量定义在while语句的外面,所以while结束之后这个变量还存在且值发生了改变
死循环
可以一直执行下去的循环 Day04 EndlessLoopDemo5
写法
循环嵌套
Day03 ForForDemo6
指循环中又包含循环
外部循环每循环一次,内部循环会全部执行完一轮
// 打印一个五行四列的星号
public static void test(){
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 4; j++) {
System.out.print("*");
}
System.out.println();
}
比如上面这段代码 内部forj执行一轮是循环体执行4次,一轮之后外部fori的循环执行了一次(也就是换行)
break continue
- break 用于跳出并结束当前所在循环的执行【只能用于结束所在循环,或者结束所在switch分支的执行】
- continue 用于跳出当前循环的当次执行,进入循环的下一次执行【只能在循环中使用】
Day03 BreakAndContinueDemo7
小练习
- 简单计算器 Day03 Demo8
- 目标:设计一个可以执行基本数学运算(加减乘除)的计算器程序
- 功能描述:用户输入两个数字、一个运算符(+ - * /),根据所选运算符执行相应的数学运算,显示运算结果
- 猜数字 Day03 Demo8
- 目标:设计一个可以让用户猜数字(1-100)的方法
- 功能描述:用户输入数字,若猜中则结束,若猜错则返回提示继续猜
- 额外知识 生成随机数

注意 r.nextInt方法生成的随机数是左闭右开,比如 r.nextInt(10)生成的是[0,10)的数,如果需要修改区间,比如生成[2,6],需要以下几步
- 转换区间为左边是0,[2-2=0,6-2=4] =[0,4]
- 转换区间为右边是开区间 [0,4]=>[0,5)
- r.nextInt(5)生成[0,5)的随机数,r.nextInt(5)+2,此时就是[2,7) 因为生成的是整数,所以也就是[2,6]
此外 使用Math.random()也可以,Math.random()生成的随机数是[0,1)范围,可以根据需要乘或加一些其他数字生成需要的随机范围
比如生成一个[0,25]范围内的随机数
int randomNumber = (int)(Math.random()*26);
- 验证码 Day03 Demo8
- 目标:开发一个程序,可以生成指定位数的验证码,每位可以是数字、大小写字母
- 找素数 Day03 Demo8
- 目标:判断101-200之间有多少个素数,并输出所有素数
- 补充知识:素数是因子为1和本身, 如果数c不是素数,则还有其他因子,其中的因子,假如为a,b.其中必有一个大于sqrt© ,一个小于sqrt© 。所以m必有一个小于或等于其平方根的因数,那么验证素数时就只需要验证到其平方根就可以了。即一个合数一定含有小于它平方根的质因子。
940

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



