chapter03 流程语句 知识点Note

2024-09-05 09:36

本文主要是介绍chapter03 流程语句 知识点Note,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

@TOC

分支结构if-else 和 switch-case
switch(表达式){case 常量值1:语句块1;//break;case 常量值2:语句块2;//break; // ...[default:语句块n+1;break;]
}

switch-case 执行过程:

第1步:根据switch中表达式的值,依次匹配各个case。如果表达式的值等于某个case中的常量值,则执行对应case中的执行语句。

第2步:执行完此case的执行语句以后,
​ 情况1:如果遇到break,则执行break并跳出当前的switch-case结构
​ 情况2:如果没有遇到break,则会继续执行当前case之后的其它case中的执行语句。—> case穿透
​ …
​ 直到遇到break关键字或执行完所有的case及default的执行语句,跳出当前的switch-case结构

使用注意点:

  • switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举enum (jdk 5.0),String (jdk 7.0);

  • case子句中的值必须是常量,不能是变量名或不确定的表达式值或范围;

  • 同一个switch语句,所有case子句中的常量值互不相同;

  • break语句用来在执行完一个case分支后使程序跳出switch语句块;

    如果没有break,程序会顺序执行到switch结尾;

  • default子句是可选的。同时,位置也是灵活的。当没有匹配的case时,执行default语句。

  • case语句必须是常量值

// 错误代码 此处case写成了表达式 不再是常量值
int key = 10;
switch(key){case key > 0 :System.out.println("正数");break;case key < 0:System.out.println("负数");break;default:System.out.println("零");break;
}

使用switch-case实现:对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。

switch(score / 60){case 0:System.out.println("不及格");break;case 1:System.out.println("及格");break;default:System.out.println("输入的成绩有误");break;
}

case穿透 在switch语句中,如果case的后面不写break,将出现穿透现象,也就是一旦匹配成功,不会在判断下一个case的值,直接向后运行,直到遇到break或者整个switch语句结束,执行终止。

Scanner类

1 导包 import java.util.Scanner

2 创建 Scanner类 实例

3 调用Scanner方法 (阻塞式方法)

4 关闭资源 Scanner.close() 避免内存泄漏

在一个类里面 调用多个Scanner 需要将close()方法放在最后面 不然会报错

Exception in thread "main" java.util.NoSuchElementException

​ 当先调用方法A时,此时并不会报错,但你调完方法A再去调方法B时便会标错了,报错为原因是因为:当你在方法A里把扫描器Scanner关掉时,扫描器里的输入流(System.in)也一起关掉了,再调方法B时,虽然重新创建了Scanner类的对象,但输入流(System.in)是无法再次打开的,因此会抛出异常NoSuchElementException。

Scanner.next()方法获取输入 nextInt() nextDouble()可以定义输入类型

Scanner类中 没有char的 类型变量方法 使用next() 后 调取charAt(0)

字符串间的比较equals()方法

循环语句 for循环 do-while循环 while循环 forEach

for循环结构
for (①初始化部分; ②循环条件部分; ④迭代部分){③循环体部分;public class ForTest1 {public static void main(String[] args) {//需求1:控制台输出5行Hello World!//写法1://System.out.println("Hello World!");//System.out.println("Hello World!");//写法2:for(int i = 1;i <= 5;i++){System.out.println("Hello World!");}}
}
  • for(;;)中的两个;不能多也不能少
  • ①初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
  • ②循环条件部分为boolean类型表达式,当值为false时,退出循环
  • ④可以有多个变量更新,用逗号分隔

1、我们可以在循环中使用break。一旦执行break,就跳出当前循环结构。

2、小结:如何结束一个循环结构?

​ 结束情况1:循环结构中的循环条件部分返回false

​ 结束情况2:循环结构中执行了break。

3、如果一个循环结构不能结束,那就是一个死循环!我们开发中要避免出现死循环。

while循环
①初始化部分
while(②循环条件部分){③循环体部分;④迭代部分;
}class WhileTest1 {public static void main(String[] args) {int i = 1;while(i <= 5){System.out.println("Hello World!");i++;}}
}
  • while(循环条件)中循环条件必须是boolean类型。

  • 注意不要忘记声明④迭代部分。否则,循环将不能结束,变成死循环。

  • for循环和while循环可以相互转换。二者没有性能上的差别。

  • 实际开发中,根据具体结构的情况,选择哪个格式更合适、美观。

  • for循环与while循环的区别:初始化条件部分的作用域不同。

嵌套循环 无限循环

所谓嵌套循环,是指一个循环结构A的循环体是另一个循环结构B。

  • 比如,for循环里面还有一个for循环,就是嵌套循环。其中,for ,while ,do-while均可以作为外层循环或内层循环。

  • 外层循环:循环结构A

    • 内层循环:循环结构B
  • 实质上,嵌套循环就是把内层循环当成外层循环的循环体。只有当内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的外层循环。

  • 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。

  • **技巧:**从二维图形的角度看,外层循环控制行数,内层循环控制列数

  • **开发经验:**实际开发中,我们最多见到的嵌套循环是两层。一般不会出现超过三层的嵌套循环。如果将要出现,一定要停下来重新梳理业务逻辑,重新思考算法的实现,控制在三层以内。否则,可读性会很差。

do-while 循环至少执行一次

while(true) for(;😉 无限循环 死循环

随机数 Random类

如何产生一个指定范围的随机整数?

1、Math类的random()的调用,会返回一个[0,1)范围的一个double型值

2、Math.random() * 100 —> [0,100)

​ int random = (int)(Math.random() * 100) + 1; 生成一个[1,100]之间的数

​ (int)(Math.random() * 100) —> [0,99]
​ (int)(Math.random() * 100) + 5 ----> [5,104]

3、如何获取[a,b]范围内的随机整数呢?(int)(Math.random() * (b - a + 1)) + a

break 一旦执行,就结束(或跳出)当前循环结构

continue 一旦执行,就结束(或跳出)当次循环结构

// 获取系统当前时间
long time = System.currentTimeMillis();
import java.lang.reflect.Array;public class PrimeNumber {public static void main(String[] args){// 找出100以内的质数  1 2 3 5 7 11 13// 测试性能int count1 = 0;int count2 = 0;// 获取系统当前时间long start = System.currentTimeMillis();for(int i = 2; i <= 10000; i++){int number = 0;for(int j = 2; j < i; j++){if(i % j == 0){number++;}}if(number == 0){// System.out.print(i + " ");count1++;}}System.out.println("count1 = " + count1);long end = System.currentTimeMillis();System.out.println("时间" + (end - start) + "ms");System.out.println();long start2 = System.currentTimeMillis();for(int i = 2; i <= 10000; i++){boolean isPrime = true;for(int j = 2; j < i; j++){if(i % j == 0){isPrime = false;break;}}if(isPrime){// System.out.print(i + " ");count2++;}   }System.out.println("count2 = " + count2);long end2 = System.currentTimeMillis();System.out.println("时间" + (end2 - start2) + "ms");}
}for(int i = 2; i <= 10000; i++){boolean isPrime = true;for(int j = 2; j <= Math.sqrt(i); j++){if(i % j == 0){isPrime = false;break;}}if(isPrime){// System.out.print(i + " ");count2++;}}

这篇关于chapter03 流程语句 知识点Note的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138590

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器

C++语法知识点合集:11.模板

文章目录 一、非类型模板参数1.非类型模板参数的基本形式2.指针作为非类型模板参数3.引用作为非类型模板参数4.非类型模板参数的限制和陷阱:5.几个问题 二、模板的特化1.概念2.函数模板特化3.类模板特化(1)全特化(2)偏特化(3)类模板特化应用示例 三、模板分离编译1.概念2.模板的分离编译 模版总结 一、非类型模板参数 模板参数分类类型形参与非类型形参 非类型模板

枚举相关知识点

1.是用户定义的数据类型,为一组相关的常量赋予有意义的名字。 2.enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出类型错误,在编译期间可检查错误。 3.enum定义的枚举类有什么特点。         a.定义的enum类型总是继承自java.lang.Enum,且不能被继承,因为enum被编译器编译为final修饰的类。         b.只能定义

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(