十一、流程控制-if-switch

流程控制

  • 1.流程控制
    • 1.1.复合语句
    • 1.2.if语句★
      • 1.2.1.简单条件的if语句★
      • 1.2.2.if...else语句★
      • 1.2.3.if...else if多分支语句★
      • 1.2.4.if语句的嵌套★
    • 1.3.switch多分支语句★
      • 1.3.1.switch语句通用语法★
      • 1.3.2.switch表达式★
      • 训练一★
      • 训练二★

——————————————————————————————————————————————————

1.流程控制

做任何事情都要遵循一定的原则。例如,到图书馆借书,就必须要有借书证,并且借书证不能过期,这两个条件缺一不可。程序设计也是如此,需要有流程控制语句来实现与用户的交流,并根据用户的输入决定程序要“做什么”“怎么做”等。

流程控制对于任何一门编程语言来说都是至关重要的,它提供了控制程序步骤的基本手段。如果没有流程控制语句,整个程序将按照线性的顺序来执行,不能根据用户的输入决定执行的序列。

——————————————————————————————————————————————————

1.1.复合语句

在Java语言中,语句是最小的组成单位,每条语句都必须使用分号作为结束符。如果想把多条语句看作单条语句,Java提供的方法又是什么呢?答案就是复合语句。

Java语言的复合语句是以整个块区为单位的语句,所以又称块语句。简而言之,复合语句是很多条语句的组合。在语法格式方面,复合语句由开括号“{”开始,闭括号“}”结束。

在前面的学习中我们已经接触了这种复合语句。例如,在定义一个类或方法时,类体就是以“{”与“}”作为开始与结束的标记,方法体同样也是以“{”与“}”作为标记的。复合语句中的每个语句都是从上到下被执行的。复合语句以整个块为单位,它能够被用在任何一个单独语句可以使用的地方,并且在复合语句中还可以嵌套复合语句。

例如,下面这段代码,在主方法中定义了复合语句块,复合语句块中还可以包含另一复合语句块。

在这里插入图片描述

在使用复合语句时要注意,复合语句为局部变量创建了一个作用域,该作用域为程序的一部分,在该作用域中某个变量被创建并能够被使用。如果在某个变量的作用域外使用该变量,则会发生错误。例如:在上述代码中,如果在复合语句外使用变量y、z、b,则将会出现错误,而变量x可在整个方法体中被使用。

——————————————————————————————————————————————————

1.2.if语句★

条件语句可根据不同的条件执行不同的语句。条件语句包括if条件语句与switch多分支语句。

使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的“布尔表达式”。如果该表达式返回的结果为true,则执行其后的语句;如果为false,则不执行if条件之后的语句。

if条件语句可分为简单的if条件语句、if…else语句和if…else if多分支语句。

——————————————————————————————————————————————————

1.2.1.简单条件的if语句★

简单的if条件语句是用于告诉程序在某种条件成立的情况下执行某一段语句,而在另一种条件成立的情况下执行另一段的语句。

简单条件的语法:

   if (布尔表达式){语句序列}

布尔表达式:必要参数,表示最后返回的结果必须是一个布尔值。可以是一个单纯的布尔变量或常量,也可以是使用关系或布尔运算符的表达式。

语句序列:可选参数。它可以是一条或多条语句,当表达式的值为true时执行这些语句。若语句序列中仅有一条语句,则可以省略条件语句中的“{ }”。

如果语句序列只有一条语句,则写法可以如下:

  int a = 100;if (a == 100)System.out.print("a的值是100");

虽然if条件语句中的语句序列只有一条语句时,省略“{ }”并无语法错误,但为了增强程序的可读性,最好不要省略。

条件语句后的语句序列被省略时:可以保留外面的大括号;也可以省略大括号,然后在末尾添加“;”。如下所示的两种情况都是正确的:

  boolean b = false;int(b);boolean b = false;if(b) {}

例:判断手机号码是否存在。

创建TakePhone类,模拟拨打电话场景,如果电话号码不是84972266,则提示拨打的号码不存在。

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

——————————————————————————————————————————————————

1.2.2.if…else语句★

if…else语句是条件语句中最常用的一种形式,它会针对某种条件有选择地做出处理。这通常表现为“如果满足某种条件,就进行某种处理,否则就进行另一种处理”。

   if (布尔表达式){语句序列1}else {语句序列2}

if后面“()”内的表达式的值必须是boolean型的。如果表达式的值为true,则执行紧跟if语句的复合语句;如果表达式的值为false,则执行else后面的复合语句。

if条件语句和if…else语句执行过程:

在这里插入图片描述

例:使用if…else语句校验密码。

在项目中创建Login类,在主方法中定义变量,并通过使用if…else语句判断变量的值,以决定输出结果。

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

——————————————————————————————————————————————————

1.2.3.if…else if多分支语句★

if…else if多分支语句用于针对某一事件的多种情况进行处理。通常表现为“如果满足某种条件,就进行某种处理;否则,如果满足另一种条件,则执行另一种处理”。语法如下:

   if (条件表达式 1){语句序列1}else if (条件表达式 2){语句序列2}...else if (条件表达式 n) {语句序列n}

条件表达式1~条件表达式n:必要参数。可以由多个表达式组成,但最后返回的结果一定要为boolean类型。

语句序列:可以是一条或多条语句。当条件表达式1的值为true时,执行语句序列1;当条件表达式2的值为true时,执行语句序列2,以此类推。当省略任意一组语句序列时,可以保留其外面的“{ }”,也可以将“{ }”替换为“;”。

执行过程如图:

在这里插入图片描述

例:使用if…else if语句实现饭店座位的分配

创建Restaurant类,声明整型变量count表示用餐人数,根据人数安排客人到4人桌、8人桌或包厢用餐。

在这里插入图片描述

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

在这里插入图片描述

——————————————————————————————————————————————————

1.2.4.if语句的嵌套★

if语句和if…else语句都可以嵌套判断语句。

在if语句中嵌套if…else语句。语法格式如下:

   if (表达式1){if(表达式2)语句1;else语句2;}

在if…else语句中嵌套if…else语句。形式如下:

   if (表达式1){if(表达式2)语句1;else语句2;}else {if(表达式2)语句1;else语句2;}

判断语句可以有多种嵌套方式,可以根据具体需要进行设计,但一定要注意逻辑关系的正确处理。

例如:使用嵌套的判断语句,判断控制台输入的年份是否是闰年;能被4整除且不能被100整除的年份,或者能被400整除的年份。代码如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

逻辑如下:

计算闰年:能被4整除,但是不能被100整除的年份;能被400整除的年份。以上2种方法满足一种即为闰年。

———————————————

如4年,执行if (iYear % 4 == 0), 能被4整除,继续执行

if(iYear % 100 == 0),不能被100整除,输出是闰年。

———————————————

如5年,执行if (iYear % 4 == 0),不能被4整除,输出不是闰年。

———————————————

如2000年,执行 (iYear % 4 == 0),能被4整除,继续执行

if(iYear % 100 == 0),能被100整除,继续执行。

if (iYear % 400 == 0),能被400整除,输出是闰年。

———————————————

详解下这个代码的写法顺序:

第一步:创建扫描器,定义变量a,存储输入的年分值。

package 流程控制;
import java.util.Scanner;
public class Year01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入年份");int a = sc.nextInt();}
}

第二步:进行逻辑运算,计算闰年:条件一:能被4整除,但是不能被100整除的年份;

先考虑第一步能被4整除,如果不能整除,则返回不是闰年。中间留空,因为条件一,要能被4整除,而且不能被100整除。先排除掉不能整除4的。

package 流程控制;
import java.util.Scanner;
public class Year01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入年份");int a = sc.nextInt();if (a % 4 == 0){} elseSystem.out.println(a + "年不是闰年");}
}

第三步:能被4整除的话,进行下一步,判断条件能被100整除不。

如果能整除,继续进行条件二,是否能被400整除。否则就满足整除4,不能整除100的条件1。直接输出是闰年。

因为条件一和条件二,是或。要么匹配被4整除不能被100整除,要么匹配被400整除。

package 流程控制;
import java.util.Scanner;
public class Year01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入年份");int a = sc.nextInt();if (a % 4 == 0){if (a % 100 == 0){} elseSystem.out.println(a + "年是闰年");} elseSystem.out.println(a + "年不是闰年");}
}

第四步:继续嵌套最终的条件2,整除400。就是闰年,否则不是闰年。

package 流程控制;
import java.util.Scanner;
public class Year01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入年份");int a = sc.nextInt();if (a % 4 == 0){if (a % 100 == 0){if (a % 400 == 0)System.out.println(a + "年是闰年");elseSystem.out.println(a + "年不是闰年");} elseSystem.out.println(a + "年是闰年");} elseSystem.out.println(a + "年不是闰年");}
}

——————————————————————————————————————————————————

1.3.switch多分支语句★

——————————————————————————————————————————————————

1.3.1.switch语句通用语法★

在编程中,一个常见的问题就是检测一个变量是否符合某个条件,如果不符合,再用另一个值来检测,以此类推。当然,这种问题使用if条件语句也可以完成。

例:使用if语句对考试成绩进行评估,代码如下:

    if(grade == "A") {System.out.println("真棒");}if (grade == "B") {System.out.println("做的不错");}

这个程序显得比较笨重,程序员需要测试不同的值来给出输出语句。在Java中,可以用switch语句将动作组织起来,以一个较简单明了的方式来实现“多选一”的选择。语法如下:

    switch (表达式){case    常量值 1;语句块 1[break;]...case   常量值 n;语句块 n[break;]default;语句块 n+1;[break;]}

switch语句中表达式的值必须是整型、字符型、字符串类型或枚举类型,常量值1~n的数据类型必须与表达式的值的类型相同。

switch语句首先计算表达式的值,如果表达式的计算结果和某个case后面的常量值相同,则执行该case语句后的若干条语句,直到遇到break语句。

此时,如果该case语句中没有break语句,则将继续执行后面case中的若干条语句,直到遇到break语句。

若没有一个常量的值与表达式的值相同,则执行default后面的语句。

default语句为可选的,如果它不存在,且switch语句中表达式的值不与任何case的常量值相同,那么switch语句就不做任何处理。

注意:

同一条switch语句,case的常量值必须互不相同。

在switch语句中,case语句后的常量表达式的值可以为整数,但绝不可以是非整数的实数。例如,下面的代码就是错误的:

    case 1.1:

switch语句的执行过程:

在这里插入图片描述

例:使用switch语句为考试分数分级。

创建Grade类,使用Scanner类在控制台中输入分数,然后用switch多分支语句判断输入的分数属于哪类成绩。10分和9分属于优,8分属于良,7分和6分属于中,5分、4分、3分、2分、1分以及0分均属于差。

if语句

在这里插入图片描述

swtich语句

使用scanner(System.in)时,使用完毕后,一定要关闭扫描器,system.in属于IO流,一旦打开,它一直占用资源,因此使用完毕后要关闭扫描器。

在这里插入图片描述

看起来两者的差距不是很大,switch语句看起来更简洁点。在JDK14以后,对switch语句有了新的写法。

——————————————————————————————————————————————————

1.3.2.switch表达式★

switch语句是用于条件判断、流程控制的组件。从上例中不难看出,switch语句的写法显得非常笨拙。为了简化代码,Java 14提供了一个新特性:switch表达式。

代码如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

——————————————————————————————————————————————————

训练一★

划分成绩等级

对一、二年级学生的考试成绩进行等级划分,等级划分标准如下:

“优秀”,大于或等于90分。
“良好”,大于或等于80分,小于90分。
“合格”,大于或等于60分,小于80分。
“不合格”,小于60分。

使用if…else if语句判断成绩等级并输出与该成绩对应的等级。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

——————————————————————————————————————————————————

训练二★

判断月份对应的季节 使用switch多分支语句判断某个月份属于哪个季节。

有好几种说法。。这个季节,是按照立春、立秋这种节气划分,还是按照通俗的。。

在气候上,四个季节是以温度来区分的。在北半球,一般来说每年的3~5月为春季,6~8月为夏季,9~11月为秋季,12~2月为冬季 。划分标准:3~5月为春季,6~8月为夏季,9~11月为秋季,12~2月为冬季。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/85009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 安装 git

一 . 安装git 方式1:通过yum 安装 yum -y install git查看是否安装成功 git --version安装目录在:/usr/libexec/git-core yum 安装有一些缺点 :不能自己指定安装目录、安装版本 方式 2 下载tar.gz 包 配置 查看git 版本:Index…

KF32A学习笔记(一):工程导入、编译烧录方法(KF32 IDE+ KF32 PRO)

目录 概述KF32 IDE打开现有项目工程1.工程导入2.编译工程3.下载程序 KF32 PRO 概述 本文主要是对KF32A150芯片程序的编译、烧录方法进行说明。针对开发过程中的编译烧录和无代码情况下的烧录两种场景,需要安装ChipON PRO KF32和ChipON IDE KF32两个上位机工具&…

【面试经典150 | 数组】跳跃游戏 II

文章目录 写在前面Tag题目来源题目解读解题思路方法一:贪心 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容…

FBX文件结构解读【文本格式】

FBX 格式几乎受到所有 3D 引擎的支持,是 Autodesk 开发的 3D 模型的专有格式。它支持顶点、索引、法线、UV坐标、材质和动画。 FBX还支持许多其他类型的信息,但它们对游戏引擎几乎没有用处。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 有两种…

9.基于粤嵌gec6818开发板小游戏2048的算法实现

2048源码&#xff1a; 感兴趣的可以去了解一下2048优化算法&#xff1a; 基于蒙特卡罗树搜索的_2048_游戏优化算法_刘子正 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> #incl…

程序员自由创业周记#12:999%

下载量涨了999% 在此之前&#xff0c;我的Apple开发账号上只有一个产品-学伟扫描&#xff0c;因为没有推广&#xff0c;只靠自然流量&#xff0c;每天的下载量寥寥无几&#xff0c;这种稳定无人问津的状态断断续续保持了4年。 之前的周记里介绍了最近在做创业的第二个项目-学伟…

PHP 如何创建一个 composer 包 并在 项目中使用自己的 composer sdk 包

第一步创建一个composer SDK项目 创建一个 composer.json文件或使用 命令 &#xff08;如果不清楚怎么弄 直接跳过即可&#xff0c;一般都会默认配置&#xff09; composer init这是生成的composer.json文件 将自己要使用的包添加到 require 中&#xff0c;如果没有require则…

mac安装运行superset及踩坑解决过程

介绍 Apache Superset 是一个现代的企业级商业智能 Web 应用程序。它快速、轻量、直观&#xff0c;并加载了各种选项&#xff0c;使所有技能的用户都可以轻松探索和可视化他们的数据&#xff0c;从简单的饼图到高度详细的 Deck.gl 地理空间图表。 安装 首先安装自制homebrew安…

1. PCIE基础入门知识

GT/s 是"每秒十亿次传输" 时间版本速率2003Pcie 1.02.5GT/s2006PCIE 2.05GT/s2010PCIE 3.08GT/s2017PCIE 4.016GT/s 高速接口&#xff1a;雷电接口&#xff08;PCIEx4接口 &#xff09; PCIE接口 工作模式&#xff1a;Endpoint 和 Root Port。 Endpoint&#xff0…

Si314 低功耗 14 通道电容触摸传感器,软硬件兼容替代GTX314L

Si314 是一款具有自动灵敏度校准功能的 14 通道电容传感器&#xff0c;其工作电压范围为 1.8~5.5V。 Si314 设置休眠模式来节省功耗&#xff0c;此时&#xff0c;功耗电流为 10uA3.3V。Si314 各个感应通道可实现独立使能、校准、灵敏度调节&#xff0c;可以确保可靠性&#xff…

Terminnal will be login out after 20 second

锐捷交换机&#xff0c;命令敲着敲着 &#xff0c;就提示20秒后将中断 &#xff0c;show ip ssh 查看也一下也没有什么特殊的。 于是查看了一下VTY下的配置 absolute-timeout 5 ,这句话是什么意思呢 &#xff1f; 5分钟强制退出 &#xff01; 改进方法&#xff1a; (config)#…

14:00面试,14:06就出来了,问的问题过于变态了。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

Revopoint的3D输出格式及转换工具

在 CES 展会期间&#xff0c;许多参观者向我们询问与我们的 3D 扫描仪相关的问题。 最常见的问题包括我们的扫描仪导出的文件格式&#xff0c;以及该文件是否与 3D 打印机兼容&#xff1f; 因此&#xff0c;我们决定回答这些问题&#xff0c;并在本文中对常见的 3D 文件格式进行…

vuejs - - - - - 使用code编辑器codemirror

使用code编辑器codemirror 0. 效果图1. 依赖安装2. 组件封装3. 组件使用 0. 效果图 列表实现参考: 列表实现代码 1. 依赖安装 npm install codemirror codemirror-editor-vue3 jsonlint-mod 2. 组件封装 code-mirror-editor.vue <template><VueCodeMirrorclas…

Nginx location 精准匹配URL = /

Location是什么&#xff1f; Location是Nginx中的块级指令(block directive)&#xff0c;通过配置Location指令块&#xff0c;可以决定客户端发过来的请求URI如何处理&#xff08;是映射到本地文件还是转发出去&#xff09;及被哪个location处理。 匹配模式 分为两种模式&…

Vim编辑器使用入门

目录 一、Vim 编辑器基础操作 二、Vim 编辑器进阶操作 三、Vim 编辑器高级操作 四、Vim 编辑器文件操作 五、Vim 编辑器文件管理 六、Vim 编辑器进阶技巧 七、Vim 编辑器增强功能 Vim的三种工作模式 一、Vim 编辑器基础操作 1.移动光标 - 光标的移动控制 移动光标有两…

计算机网络常见面试题

目录 一、谈一谈对OSI七层模型和TCP/IP四层模型的理解&#xff1f; 答&#xff1a;OSI七层模型主要分为&#xff1a; TCP/IP四层协议&#xff1a; 二、谈谈TCP协议的3次握手过程&#xff1f; 三、TCP协议为什么要3次握手&#xff1f;2次&#xff0c;4次不行吗&#xff1f; …

微信这样的加人方式,既安全又解放双手

在当今竞争激烈的市场环境下&#xff0c;如何高效地管理和运营私域流量成为企业发展的关键。 1.批量自动化加好友的优势 &#xff08;1&#xff09;提高效率&#xff1a;批量自动化添加好友功能可以帮助企业添加大量潜在客户或目标客户。相比手动逐个添加好友&#xff0c;自动…

嵌入式Linux驱动开发(I2C专题)(七)

使用GPIO操作I2C设备_IMX6ULL 参考资料&#xff1a; Linux文档 Linux-5.4\Documentation\devicetree\bindings\i2c\i2c-gpio.yamlLinux-4.9.88\Documentation\devicetree\bindings\i2c\i2c-gpio.txt Linux驱动源码 Linux-5.4\drivers\i2c\busses\i2c-gpio.cLinux-4.9.88\driv…

spring boot 时间格式化输出

目录标题 一、spring boot 序列化二、 JsonFormat(pattern "yyyy-MM-dd HH:mm:ss")和JSONField(format "yyyy-MM-dd HH:mm:ss")区别三、在实体类中序列化时间&#xff08;格式化输出&#xff09;&#xff08;一&#xff09;使用JsonFormat&#xff08;二…