【黑马程序员JAVA笔记+完整代码】DAY03 程序流程控制

对应网课为:【黑马程序员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
注意:

  1. 如果不写break的话,代码就会从找到匹配的case值执行对应的case代码块和下面 case 对应的代码块(如果一直没有break 那么default里的也会执行),直到遇到break或者执行完整个switch代码块【叫做switch的穿透性】
  2. 另外 default里的代码是当所有值都不匹配的时候才会执行
  3. case之后的值只能是字面量 不能是变量
  4. case之后的值不能重复
  5. switch表达式类型只能是byte、short、int、char、JDK5开始支持枚举、JDK7开始支持String,不支持double、float、long(因为Java浮点数的表示存在精度问题,可能会导致不精确的比较结果 可以用if语句来判断)

switch的穿透性有时候也可以有正面作用,比如某几个case值需要执行的代码一致,那么就可以写在一起

switch(表达式){
  case1case2case3:
    执行代码(三个值的操作相同);
    break;
  case4:
    执行值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的比较:

  1. if在功能上更强大
  2. 当条件是区间的时候,一般用if分支实现
  3. 当条件是一个一个的值来比较的时候,一般用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
小练习

  1. 简单计算器 Day03 Demo8
  • 目标:设计一个可以执行基本数学运算(加减乘除)的计算器程序
  • 功能描述:用户输入两个数字、一个运算符(+ - * /),根据所选运算符执行相应的数学运算,显示运算结果
  1. 猜数字 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);
  1. 验证码 Day03 Demo8
  • 目标:开发一个程序,可以生成指定位数的验证码,每位可以是数字、大小写字母
  1. 找素数 Day03 Demo8
  • 目标:判断101-200之间有多少个素数,并输出所有素数
  • 补充知识:素数是因子为1和本身, 如果数c不是素数,则还有其他因子,其中的因子,假如为a,b.其中必有一个大于sqrt© ,一个小于sqrt© 。所以m必有一个小于或等于其平方根的因数,那么验证素数时就只需要验证到其平方根就可以了。即一个合数一定含有小于它平方根的质因子。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值