新手请进,来看看Java if else分支结构精讲

news2024/10/6 12:23:10

java 支持两种选择语句:if 语句和 switch 语句。其中 if 语句使用布尔表达式或布尔值作为分支条件来进行分支控制,而 switch 语句则用于对多个整型值进行匹配,从而实现分支控制。这些语句允许你只有在程序运行时才能知道其状态的情况下,控制程序的执行过程。如果你没有 C/C++ 的编程背景,你将会为这两个语句的强大功能和灵活性而感到吃惊。

选择结构(也叫分支结构)解决了顺序结构不能判断的缺点,可以根据一个条件判断执行哪些语句块。选择结构适合于带有逻辑或关系比较等条件判断的计算。例如,判断是否到下班时间,判断两个数的大小等。
 

if 结构

if 语句是使用最多的条件分支结构,它属于选择语句,也可以称为条件语句。

if 选择结构是根据条件判断之后再做处理的一种语法结构。默认情况下,if 语句控制着下方紧跟的一条语句的执行。不过,通过语句块,if 语句可以控制多个语句。

if 语句的最简语法格式如下,表示“如果满足某种条件,就进行某种处理”。

 
  1. if (条件表达式) {
  2. 语句块;
  3. }

其中“条件表达式”和“语句块”是比较重要的两个地方。

  1. 条件表达式:条件表达式可以是任意一种逻辑表达式,最后返回的结果必须是一个布尔值。取值可以是一个单纯的布尔变量或常量,也可以是使用关系或布尔运算符的表达式。如果条件为真,那么执行语句块;如果条件为假,则语句块将被绕过而不被执行。
  2. 语句块:该语句块可以是一条语句也可以是多条语句。如果仅有一条语句,可省略条件语句中的大括号 {}。当从编程规范角度不要省略大括号,省略大括号会使程序的可读性变差。


if 条件语句的运行流程如图 1 所示。
 


图1  if 语句执行流程图

例 1

编写一个 Java 程序,允许用户从键盘输入一个数字,再判断该数是否大于 100。使用 if 语句的实现代码如下:

 
  1. public static void main(String[] args) {
  2. System.out.println("请输入一个数字:");
  3. Scanner input = new Scanner(System.in);
  4. int num = input.nextInt(); // 接收键盘输入数据
  5. // 判断用户输入的数据是否大于100
  6. if (num > 100) {
  7. System.out.println("输入的数字大于100");
  8. }
  9. // 判断用户输入的数据是否等于100
  10. if (num == 100) {
  11. System.out.println("输入的数字等于100");
  12. }
  13. // 判断用户输入的数据是否小于100
  14. if (num < 100) {
  15. System.out.println("输入的数字小于100");
  16. }
  17. }

运行该程序,分别使用键盘输入 99、100 和 105,结果如下所示:

请输入一个数字:
99
输入的数字小于100
请输入一个数字:
100
输入的数字等于100
请输入一个数字:
105
输入的数字大于100
例 2

假设有 num1 和 num2 两个变量,它们的值分别是 50 和 34。下面编写程序,要求使用 if 语句判断 num1 和 num2 的大小关系,并输出比较结果。

实现代码如下:

 
  1. public static void main(String[] args) {
  2. int num1 = 50;
  3. int num2 = 34;
  4. if (num1 > num2) {
  5. System.out.println("num1大于num2");
  6. }
  7. if (num1 == num2) {
  8. System.out.println("num2等于num2");
  9. }
  10. if (num1 < num2) {
  11. System.out.println("num1小于num2");
  12. }
  13. }

该段选择语句判断了 num1 值和 num2 值的大于、等于和小于关系。此处 num1 为 50,num2 为 34,所以执行后会输出“num1 大于 num2”。

例 3

在上述两个案例代码中,由于每个 if 语句的语句块中只包含一条语句,所以省略了大括号。本实例在登录系统中要求用户名、密码和验证码都必须正确,否则将显示登录失败及错误提示。其中的语句块有多条语句,所以需要使用大括号。代码如下:

 
  1. public static void main(String[] args) {
  2. String username = "admin"; // 用户名
  3. String userpass = "123456"; // 密码
  4. String code = "0000"; // 验证码
  5. if (username != "admin" && userpass != "123456" && code != "0000") {
  6. System.out.println("登录失败!");
  7. System.out.println("请检查输入的用户名、密码和验证码是否正确!");
  8. }
  9. }

在这里为 if 语句设置了一个复杂的复合表达式来验证登录条件。执行后的输出结果如下:

登录失败!
请检查输入的用户名、密码和验证码是否正确!

if-else 结构

单 if 语句仅能在满足条件时使用,而无法执行任何其他操作(停止)。而结合 else 语句的 if 可以定义两个操作,此时的 if…else 语句表示“如果条件正确则执行一个操作,否则执行另一个操作”。

使用 if…else 语句的语法格式如下所示:

 
  1. if (表达式) {
  2. 语句块1;
  3. } else {
  4. 语句块2;
  5. }

在上述语法格式中,如果 if 关键字后面的表达式成立,那么就执行语句块 1,否则的话则执行语句块 2,其运行流程如图 2 所示。
 



图2  if…else 运行流程

例 4

在例 3 中为实现比较 num1 和 num2 的大小,使用了 3 个 if 条件语句分别判断大于、等于和小于的情况。下面使用 if…else 双条件来实现,具体代码如下:

 
  1. public static void main(String[] args) {
  2. int num1 = 50;
  3. int num2 = 34;
  4. // 如果num1等于num2
  5. if (num1 == num2) {
  6. System.out.println("num1等于num2");
  7. }
  8. // 如果num1大于num2
  9. if (num1 > num2) {
  10. System.out.println("num1大于num2");
  11. } else {
  12. // 否则就是num1小于num2
  13. System.out.println("num1小于num2");
  14. }
  15. }

双条件语句减少了代码的编写量,同时增强了程序的可读性。简化后的结果还是一样,执行后会输出“num1 大于 num2”。

多条件 if-else-if 语句

if 语句的主要功能是给程序提供一个分支。然而,有时候程序中仅仅多一个分支是远远不够的,甚至有时候程序的分支会很复杂,这就需要使用多分支的 if…else if 语句。

通常表现为“如果满足某种条件,就进行某种处理,否则如果满足另一种条件才执行另一种处理……,这些条件都不满足则执行最后一种条件”。

if…else if 多分支语句的语法格式如下所示:

 
  1. if(表达式1) {
  2. 语句块1;
  3. } else if(表达式2) {
  4. 语句块2;
  5. ...
  6. } else if(表达式n) {
  7. 语句块n;
  8. } else {
  9. 语句块n+1;
  10. }

可以看出,else-if 结构实际上是 if-else 结构的多层嵌套。明显的特点就是在多个分支中只执行一个语句组,而其他分支都不执行,所以这种结构可以用于有多种判断结果的分支中。

在使用 if…else if 语句时,依次判断表达式的值,当某个分支的条件表达式的值为 true 时,则执行该分支对应的语句块,然后跳到整个 if 语句之外继续执行程序。如果所有的表达式均为 false,则执行语句块 n+1,然后继续执行后续程序,其运行流程如图 3 所示。
 



图3  if…else if 语句的执行流程

例 5

同样以比较 num1 和 num2 的大小为例,使用 if…else if 多条件的实现代码如下:

 
  1. public static void main(String[] args) {
  2. int num1 = 50;
  3. int num2 = 34;
  4. if (num1 == num2) { // 如果num1等于num2
  5. System.out.println("num1等于num2");
  6. } else if (num1 > num2) { // 如果num1大于num2
  7. System.out.println("num1大于num2");
  8. } else { // 否则就是小于
  9. System.out.println("num1小于num2");
  10. }
  11. }

如上述代码所示,num1 和 num2 不满足 if 语句的“num1==num2”条件,接着测试 else if 的“num1>num2”条件,满足该条件并输出“num1 大于 num2”。

例 6

假设某学校对成绩的判断标准是:不低于 90,可以评为优秀;低于 90 但不低于 80,可以评为良好;低于 80 但不低于 60,可以评为中等;否则评为差。

 
  1. public static void main(String[] args) {
  2. System.out.println("请输入考试成绩:");
  3. Scanner input = new Scanner(System.in);
  4. int score = input.nextInt(); // 接收键盘输入数据
  5. if (score >= 90) { // 考试成绩>=90
  6. System.out.println("优秀");
  7. } else if (score >= 80) { // 90>考试成绩>=80
  8. System.out.println("良好");
  9. } else if (score >= 60) { // 80>考试成绩>=60
  10. System.out.println("中等");
  11. } else { // 考试成绩<60
  12. System.out.println("差");
  13. }
  14. }

当考试成绩为 90 分以上时,则执行第一个 if 语句,下面的 3 个条件判断语句不会执行;当考试成绩为 80 分以上 90 分以下时,则执行第一个 else if 语句;当考试成绩在 60~80 分,并且包含 60 分的成绩,则执行第二个 else if 语句;如果上述 3 个条件都不满足,则执行 else 语句。

程序运行后的输出效果如下所示:

请输入考试成绩:
100
优秀
请输入考试成绩:
88
良好
请输入考试成绩:
50
差

嵌套 if 的使用

if 语句的用法非常灵活,不仅可以单独使用,还可以在 if 语句里嵌套另一个 if 语句。同样,if…else 语句和 if…else if 语句中也可以嵌套另一个 if 结构的语句,以完成更深层次的判断。

嵌套 if 的语法格式如下:

 
  1. if(表达式1) {
  2. if(表达式2) {
  3. 语句块1;
  4. } else {
  5. 语句块2;
  6. }
  7. } else {
  8. if(表达式3) {
  9. 语句块3;
  10. } else if(表达式4) {
  11. 语句块4;
  12. } else {
  13. if(表达式n) {
  14. 语句块n;
  15. } else {
  16. 语句块n+1;
  17. }
  18. }
  19. }

在上述格式中,应该注意每一条 else 与离它最近且没有其他 else 对应的 if 相搭配,其执行流程如图 4 所示。
 



图4  嵌套 if 语句执行流程

例 7

活动计划安排,如果今天是工作日,去上班;如果今天是周末,则出去游玩;同时,如果周末天气晴朗,去室外游乐场游玩,否则去室内游乐场游玩。实现代码如下:

 
  1. public static void main(String[] args) {
  2. String today = "周末";
  3. String weather = "晴朗";
  4. if (today.equals("周末")) {
  5. if (weather.equals("晴朗")) {
  6. System.out.println("去室外游乐场游玩");
  7. } else {
  8. System.out.println("去室内游乐场游玩");
  9. }
  10. } else {
  11. System.out.println("去上班");
  12. }
  13. }

如上述代码所示,today 满足 if 语句的“today.equals("周末")”条件,接着测试 weather 是否满足“weather.equals("晴朗")”条件,满足该条件输出“去室外游乐场游玩”。

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

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

相关文章

Java架构师技术选型

目录 1 技术选型原则1.1 使用成熟的技术这个大家很好理解。1.2 选用最少的技术。1.3 选用能够掌控的技术。1.4 选用最合适的技术1.5 选成熟的价格低廉的商业技术或服务1.6 选主流的开源技术2 技术选型方法2.1 用户提出的对软件技术的约束2.2 团队最熟的技术栈来作为技术选型的基…

2024年pmp考试还有多久啊?怎么备考?

2024年将有4次PMP考试&#xff0c;分别在3月、5月、8月和11月进行。最近一次考试是3月份&#xff0c;虽然可能有些人觉得时间还很早&#xff0c;但实际备考时间要根据个人情况而定。如果你有一定的经验基础&#xff0c;备考一个半月左右的时间应该没有问题。但如果你是一个没有…

如何设计自动化测试框架?

一、什么是自动化测试框架 自动化测试框架是一个基于软件工程原则和最佳实践的结构化系统&#xff0c;可以帮助测试人员更有效地编写、维护和执行自动化测试脚本。它通常包括多个模块和组件&#xff0c;如测试用例管理、测试数据管理、测试脚本编写、测试报告生成等。 自动化…

【80%测试员被骗,关于jmeter 的一个弥天大谎!】

jmeter是目前大家都喜欢用的一款性能测试工具&#xff0c;因为它小巧、简单易上手&#xff0c;所以很多人都愿意用它来做接口测试或者性能测试&#xff0c;因此&#xff0c;在目前企业中&#xff0c;使用各个jmeter的版本都有&#xff0c;其中以jmeter3.x、4.x的应该居多 但是…

【Spring篇】讲解Bean的三种配置和实例化方法

&#x1f38a;专栏【Spring】 &#x1f354;喜欢的诗句&#xff1a;天行健&#xff0c;君子以自强不息。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f33a;bean基本配置&#x1f33a;bean别名配置&#x1f33a…

初创公司低预算,如何做好品牌宣传?

品牌宣传对于企业十分重要&#xff0c;假如企业在毫无知名度&#xff0c;消费者是很难选择其产品的&#xff0c;只有通过品牌宣传建立良好的企业形象&#xff0c;消费者才会对公司产品产生信赖感&#xff0c;但是初创公司预算低&#xff0c;应该如何做好品牌宣传呢&#xff0c;…

程序化广告平台如何让app广告变现收益最大化?

程序化广告可以解决开发者的关心的“广告变现收益增长难”、“广告质量是否会影响用户体验”等问题&#xff0c;想要app广告变现的收益最大化&#xff0c;接入程序化广告平台是必不可少的一环。 https://www.shenshiads.comhttps://www.shenshiads.com 什么是程序化广告平台&…

针对FTP的SSRF攻击

前言 ssrf中常用的协议有http&#xff0c;gopher等。但http协议在ssrf中的用处也仅限于访问内网页面&#xff0c;在可以crlf的情况下才有可能扩大攻击范围。gopher协议比较特殊&#xff0c;在部分环境下支持此协议&#xff0c;如&#xff1a;curl。但还有一些环境就不支持了&a…

【复古数码】轻律U1头戴式耳机,让你感受音乐的魔力!

品牌介绍 根据惯例&#xff0c;了解一款产品先从了解其品牌入手吧&#xff0c;UMELODY&#xff08;Undertone Melody&#xff09;&#xff0c;中文名轻律&#xff0c;创始团队深耕音频行业&#xff0c;2009年至今&#xff0c;品牌将复古潮流文化结合与音频设备之中。 从复古到…

Speeded-Up Robust Features (SURF)全文翻译

Speeded-Up Robust Features (SURF) 摘要 这篇文章提出了一种尺度和旋转不变的检测子和描述子&#xff0c;称为SURF(Speeded-Up Robust Features)。SURF在可重复性、鉴别性和鲁棒性方面都接近甚至超过了以往的方案&#xff0c;同时计算和比较的速度更快。 这依赖于使…

C# excel操作

使用库 Spire.Xls 下载 示例数据 代码示例 1.删除列 代码 private static void DeleteExcelColumns1(string excelPath) {if (excelPath.Length 0) {Console.WriteLine("excel文件路径为空");}else{Console.WriteLine("删除列方法1&#xff1a;保留第一列&…

日报系统:优化能源行业管理与决策的利器

日报系统&#xff1a;优化能源行业管理与决策的利器 引言&#xff1a; 随着能源行业的快速发展和复杂性增加&#xff0c;管理各个部门的数据变得至关重要。为了提高运营效率和决策的准确性&#xff0c;能源行业普遍采用日报系统作为综合数据汇报和分析的工具。本文将探讨日报系…

centos7 配置coreboot编译环境 以及编译问题解决

需要的配置 (有的资源在国外可能需要翻墙) 操作系统: centos7.9 参考文章 coreboot源码分析之编译和运行coreboot - 知乎 //coreboot编译总说明 https://www.coreboot.org/Build_HOWTO#Requirements https://poe.com/ChatGPT 注意: 因为github不稳定 所以gitee为主 1. 下载…

yolov5训练加速

问题记录及解决 1、使用ddp训练&#xff0c;生成标签的cache报错&#xff0c;等待时间过长。 方法&#xff1a;先使用dp训练&#xff0c;生成标签的cache&#xff0c;停掉再使用ddp方式训练。 2、 [E ProcessGroupNCC L.cpp:828] [Rank 6] Watchdog caught collective operat…

VR全景技术打造“智慧亚运”,实现720度自由视角

亚运会已然闭幕&#xff0c;亚运盛会不仅仅是体育健儿的竞技舞台&#xff0c;也是新技术的展示窗口&#xff0c;通过5G技术打造“智慧亚运”&#xff0c;VR技术在亚运会上的呈现比比皆是。有人可能会觉得非常新奇&#xff0c;其实VR全景技术早在几年前开始融入我们的生活。 VR全…

暴力递归转动态规划(八)

棋盘问题 将棋盘最左下角当作是平面直角坐标系的原点&#xff08;0&#xff0c;0&#xff09;位置&#xff0c;那么这个棋盘横坐标上就是9条线&#xff0c;纵坐标就是10条线&#xff0c;给定三个参数a、b、k&#xff0c;返回“马”从&#xff08;0&#xff0c;0&#xff09;位置…

BUUCTF reverse3 1

先运行下 看来是输入正确的flag 使用DIE查看文件 看起来没有壳&#xff0c;直接IDA打开 shift F12查找字符串 一路跟踪 到汇编窗口后F5 这里对Destination和Str2进行比较&#xff0c;Str2有值那么Str2就是经过上面一系列处理之后得到的内容了 继续分析上面的代码 根据…

企业电子杂志如何制作与分享

企业电子杂志相比传统纸质杂志具有更多的多媒体展示方式。在制作过程中&#xff0c;可以添加视频、音频、动画等多媒体元素来丰富电子杂志的内容&#xff0c;给人以独特的阅读体验。 如何制作企业电子杂志并分享出去&#xff1f;推荐用FLBOOK&#xff0c;可以快速做出漂亮的翻…

软考报名全流程及注意事项

软考报名方式有两种&#xff1a;现场报名与网上报名 现场报名&#xff1a; 由本人提出申请&#xff0c;按照规定携带身份证明到当地考试管理机构报名&#xff0c;领取准考证。 凭准考证、身份证明在指定的时间、地点考试。 具体各个省份&#xff0c;请考生登录所在省的软考…

C#学习系列相关之多线程(四)----async和await的用法

一、async、await用法的作用 async用法主要是用来作为修饰符将方法作为异步方法使用&#xff0c;await关键字只用作为在异步方法才能使用&#xff0c;也就是只有当方法有async修饰后&#xff0c;才能在方法中使用await&#xff0c;await后跟Task新的任务启动。&#xff08;awai…