java学习笔记-第五章:※程序控制结构

第五章:程序控制结构

总体内容

程序控制结构:顺序控制,分支控制,循环控制
在这里插入图片描述

程序控制结构

顺序控制

在这里插入图片描述

分支控制

if-else

在这里插入图片描述

if-else if-else if-else

  1. 可以没有else
  2. 示例
    注意:这里输入只能是整数,非整数需要使用异常
    在这里插入图片描述
    注意:分支嵌套-进行判断前先进行有效性确认
    在这里插入图片描述
    注意这个练习中的赋值语句
    在这里插入图片描述

分支嵌套

注意:建议分支嵌套最多三层,不然可读性不好
在这里插入图片描述

引申:接收字符的方法
  1. 先接收字符串,再取出字符串中的第一个字符
  2. 示例:接收一个性别
    在这里插入图片描述

switch-case-break

没有匹配到的默认执行default
在这里插入图片描述

注意switch的细节

在这里插入图片描述

  1. 解读细节1:表达式的数据类型,必须和case的数据类型保持一致,或者两者之间可以进行比较在这里插入图片描述
  2. 解读细节2:表达式的数据类型必须是byte,short,int,char,enum(枚举),String
  3. 解读细节3:case子句中的值必须是常量或者是常量表达式,不能是变量
    在这里插入图片描述
练习:注意switch中编程思想

思想:把表达式转换为数字
在这里插入图片描述
在这里插入图片描述
思想:穿透的思想,利用case和break的配合
在这里插入图片描述

何时使用switch和if

在这里插入图片描述

循环控制

for循环

for循环基本语句介绍

在这里插入图片描述
在这里插入图片描述

for循环执行原理的例题(关键循环执行顺序)

在这里插入图片描述

for循环注意的细节

在这里插入图片描述

引申:ctrl+c会退出死循环

在这里插入图片描述
解读细节2:
写在for循环语句中则i的作用域只是for循环内部
写在外部则作用域是整个程序
在这里插入图片描述

for循环编程思想

两个思想:化繁为简,先死后或

例题1

在这里插入图片描述
思想1:化繁为简(问题拆解)
在这里插入图片描述
思想2:先死后活(常量换变量)
在这里插入图片描述

※例题2(问题拆解)

在这里插入图片描述
在这里插入图片描述

while循环

while循环基本语句介绍

在这里插入图片描述
在这里插入图片描述

do-while循环

do-while循环基本语句以及细节、例题
  1. 千万注意:while后有一个分号
  2. 做菜单时用的较多,因为菜单肯定要先执行一次
    在这里插入图片描述
  3. 一个例题:注意条件组合
    在这里插入图片描述
  4. do-while实现菜单的样例
    在这里插入图片描述

多重循环

要注意的点
  1. 循环间相互嵌套(外层循环,内层循环),建议嵌套最多两层,最多不超过三层,否则可读性差
  2. 嵌套循环就是把内层循环当作外层循环的循环体,当内层是false时进行外层的下一次循环
  3. 循环的次数:外层循环次数×内层循环次数
※多重循环的案例(注意两个思想和问题拆分)
1. 3个班级平均分,及格人数和总分

问题:3个班级平均分和所有班级平均分以及三个班级及格人数(这里列出的化繁为简,先死后活自己将常量修改为变量)
在这里插入图片描述
1.1 注意:这里没有用数组,只是用了一个变量去接收这5个成绩,但是在循环内就已经对每一个学生的信息进行了统计
1.2 ※思路:先进行一个班的统计(内循环进行5次获取学生信息+信息统计),然后再嵌套一个循环(外循环进行3次
1.3 看这张图:循环内进行总数计算,循环结束下一行进行平均分计算
在这里插入图片描述
在这里插入图片描述

2. 九九乘法表(实现简单,体会思想就好)

2.1 思想:要想外循环和内循环如何嵌套:外循环进行几次,其中的内循环又执行几次
2.2 外循环9次,内循环循环的次数是根据外循环的值来变化
2.3 多少列就是外循环次数,多少行就是内循环次数
在这里插入图片描述
在这里插入图片描述

3. ※※空心金字塔(思想的整合)

在这里插入图片描述
3.1 打印整个金字塔的规律(九九乘法表的升级–>找到内循环的规律):
在这里插入图片描述
3.2 打印空心金字塔的变成思想(内循环不仅要计算出次数还要对里面的内容进行判断):
//整个金字塔时,不加判断直接输出*
//空心金字塔只有第一个和最后一个才输出*,所以要进行判断
3.3 编程过程及思路如下(先死后活,将常量变为变量,这里不写了)
3.4 这里最后一层我加了一个判断,其实不用,要会用条件组合!!!
在这里插入图片描述
在这里插入图片描述
3.5 打印结果:
在这里插入图片描述

跳转控制语句

break

引申:生成[1,100]随机数
  1. Math.random()生成[0,1)的double值在这里插入图片描述
  2. 给它乘100,再强转为int类型,则范围就是[0,99]的整数
  3. 再+1,则范围是[1,100]的整数
    在这里插入图片描述
循环中使用break的细节

注意:适用于循环中,默认执行当前循环体,当满足条件时跳出该循环
在这里插入图片描述

  1. 在循环中进行判断,如果满足条件则使用break跳出循环
    在这里插入图片描述
  2. break默认是退出所在层的循环,如果用了标签则可以指定退出哪层(不推荐使用标签)
    在这里插入图片描述
    使用了lable标签指定:
    在这里插入图片描述
循环中使用break的案例
案例1:累积和第一次大于20时的当前数(注意作用域)
  1. 注意作用域:
    在这里插入图片描述
    1.1 (推荐)方法1:在循环外部定义变量n,当条件满足时,把i赋给n
    在这里插入图片描述
    1.2 方法2:在循环外部初始化int i = 1;
    在这里插入图片描述
案例2:模拟登陆验证,有三次机会
引申:sublime缩进和取消缩进

tab和shift+tab(取消缩进)

引申:判断字符串内容是否一致的函数方法equals()

推荐将具体的比较值放在前面,这样可以避免空指针
在这里插入图片描述
在这里插入图片描述

实现思路以及注意点和优化

思想利用:化繁为简

  1. 先不想循环,先想一次分支判断:是否登陆成功,输出成功/不成功
  2. 想循环,把一次分支装进循环里(最多循环三次),如果true则跳出循环

注意和优化:

  1. 作用域:name和password不能在循环体内定义,要在外部先定义再初始化
  2. 优化:可以定义一个变量chance,每登录失败一次就减1
  3. 优化:可以不写else,break以后就不会执行后面的语句,只有if不成立时才会进行后面的chance–和输出语句
import java.util.Scanner;
public class Dengluyanzheng{
	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);
		String name = "";
		String password = "";
		int chance = 3;
		for(int i = 1;i<=3;i++){
			System.out.println("请输入名字:");
			name = scanner.next();
			System.out.println("请输入密码:");
			password = scanner.next();
			if("wpz".equals(name)&&"123".equals(password)){
				System.out.println("登录成功");
				break;
			}
			chance--;
			System.out.println("还有" + chance + "次机会,请重新输入");
		}
	}
}

continue

continue介绍
  1. continue是结束本次循环进行下一次循环(break是直接跳出循环,谁都不执行了)
    在这里插入图片描述
  2. continue的执行过程
    在这里插入图片描述
  3. 使用标签指定continue跳出哪个循环,开始进行哪个循环的下一次(默认是跳出最近的循环)
    在这里插入图片描述

return

return:跳出所在方法,用在main方法中表示退出程序
在这里插入图片描述
在这里插入图片描述

本章案例

1. 案例1(注意辨别分支的条件)

在这里插入图片描述

2. 案例2:水仙花数(注意计算个位十位百位)

在这里插入图片描述

3. 案例3:输出每5个换一次行(定义一个变量去计数)

3.1 注意:每次定义变量都要想一想它的作用域要求是什么
3.2 注意:控制语句是嵌套还是并列(逻辑关系是怎样),本题循环里套分支,先判断是否符合条件1,再判断是否符合条件2
在这里插入图片描述

4. 案例4:输出a-z和A-Z(考察字符可以加加减减)

在这里插入图片描述

5. 案例5:求1-1/2+1/3-1/4…1/100的和(注意1/2的精度问题)

5.1 1/2结果是int类型!!!
5.2 要得到正确的结果要写成1.0/2
5.3 分析判断得到,偶数时是减法,奇数是+法,所以用分支判断就好了
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值