【JAVASE】顺序和选择结构

⭐ 作者:小胡_不糊涂
🌱 作者主页:小胡_不糊涂的个人主页
📀 收录专栏:浅谈Java
💖 持续更文,关注博主少走弯路,谢谢大家支持 💖

顺序和选择

  • 1. 顺序结构
  • 2. 分支结构
    • 2.1 if 语句
    • 2.2 switch 语句

1. 顺序结构

顺序结构比较简单,就是按照代码书写的顺序一行一行执行。

例如:

System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");

这段代码的运行结果就是从上至下输出:

aaa
bbb
ccc

如果调整代码的书写顺序, 则执行顺序也发生变化:

System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb")

🍤 输出:

aaa
ccc
bbb

2. 分支结构

2.1 if 语句

语法格式1:

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

如果布尔表达式结果为 true,执行 if 中的语句,否则不执行。

比如:小明,如果这次考试考到90分或以上,给你奖励一个鸡腿。

    public static void main(String[] args) {int score = 92;if(score >= 90){System.out.println("吃个大鸡腿!!!");}}  

🍤 运行结果:

在这里插入图片描述

语法格式2:

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

如果布尔表达式结果为 true,则执行 if 中语句,否则执行 else 中语句。

比如:小明,如果这次考到90分以上,给你奖励一个大鸡腿,否则奖你一个大嘴巴子。

public static void main(String[] args) {int score = 89;if(score >= 90){System.out.println("吃个大鸡腿!!!");}else{System.out.println("挨大嘴巴子!!!");}
}

🍤 运行结果:

在这里插入图片描述

语法格式3:

if(布尔表达式1){// 语句1
}else if(布尔表达式2){// 语句2
}else{// 语句3
}

表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3。

比如:我们定义一个分数区间来划分学生的成绩

分数在 [90, 100] 之间的,为优秀
分数在 [80, 90) 之前的,为良好
分数在 [70, 80) 之间的,为中等
分数在 [60, 70) 之间的,为及格
分数在 [ 0, 60) 之间的,为不及格
错误数据

代码实现:

 public static void main(String[] args) {int score=88;//学生成绩//判断if(score >= 90){System.out.println("优秀");}else if(score >= 80 && score < 90){System.out.println("良好");}else if(score >= 70 && score < 80){System.out.println("中等");}else if(score >= 60 && score < 70){System.out.println("及格");}else if(score >= 0 && score < 60){System.out.println("不及格");}else{System.out.println("错误数据");}
}

🍤 运行结果:

在这里插入图片描述

实例1:判断一个数字是奇数还是偶数

首先需要知道判断奇偶的规则。数学上,我们判断奇偶数是以该数是否可以整除 2 为根据的,一个数能够整除 2,即计算的余数为 0,当除以 2 后的余数为 0 时,就说明了该数为偶数,否则是奇数。

我们已经了解判断奇偶数的方法,尝试写出代码:

public static void main(String[] args) {int num = 10;if (num % 2 == 0) {System.out.println("num 是偶数");} else {System.out.println("num 是奇数");}
}

🍤 运行结果:
在这里插入图片描述

实例2:判断一个数字是正数,负数,还是零

大于 0 是正数,小于 0 是负数,所以这里只需要判断是大于、小于还是等于。

 public static void main(String[] args) {int num = 10;if (num > 0) {System.out.println("正数");} else if (num < 0) {System.out.println("负数");} else {System.out.println("0");}
}

🍤 运行结果:

在这里插入图片描述

实例3:判断一个年份是否为闰年

普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。

public static void main(String[] args) {int year = 2000;if (year % 100 == 0) {// 判定世纪闰年if (year % 400 == 0) {System.out.println("是闰年");} else {System.out.println("不是闰年");}} else {// 普通闰年if (year % 4 == 0) {System.out.println("是闰年");} else {System.out.println("不是闰年");}}
}

🍤 运行结果:

在这里插入图片描述
注:

  • 分号问题
    这段代码的结果会是什么?
public static void main(String[] args) {int x = 20;if (x == 10);{System.out.println("hehe");}
}

🍤 运行结果:

在这里插入图片描述

有人可能会好奇,为什么这里 x 明明是20,不等于10啊,怎么还会打印 hehe 。

仔细观察就会发现:if 语句后跟有一个分号,这里导致分号成为了 if 语句的语句体,而 { } 中的代码已经成为了和一个 if 无关的代码块,所以会打印出来。

在这里插入图片描述
🍩分号代表语句的结束

  • 悬垂 else 问题
 public static void main(String[] args) {int x = 10;int y = 10;if (x == 20)if (y == 10)System.out.println("aaa");elseSystem.out.println("bbb");
}

🍤 运行结果:

在这里插入图片描述

为什么什么都没有打印?

首先if / else 语句中可以不加大括号,当不加{}时,他只控制下面的一条语句,要控制多行,必须加上大括号。
其次就是 else 是和最接近的 if 匹配,并不是和谁对齐就与它匹配。

2.2 switch 语句

基本语法:

switch(表达式){case 常量值1:{语句1;[break;]}case 常量值2:{语句2;[break;]}...default:{...;//内容都不满足时执行语句[break;]}
}

执行流程:

  1. 先计算表达式的值
  2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
  3. 当表达式的值没有与所列项匹配时,执行default

实例:根据 day 的值输出星期

public static void main(String[] args) {int day = 6;switch(day) {case 1:System.out.println("星期一");break;//遇到break停止,跳出switch语句case 2:System.out.println("星期二");break;case 3:System.out.println("星期三");break;case 4:System.out.println("星期四");break;case 5:System.out.println("星期五");break;case 6:case 7:System.out.println("周末");break;default:System.out.println("输入有误");break;}
}

🍤 运行结果:

在这里插入图片描述

注:

  • 多个case后的常量值不可以重复
  • switch的括号内只能是以下类型的表达式:
    基本类型:byte、char、short、int,不能是long、float、double、boolean类型;
    引用类型:String常量串、枚举类型
  • break 不要遗漏,否则会失去 “多分支选择” 的效果
  • switch 不能表达复杂的条件
  • switch 虽然支持嵌套,但是很丑,一般不推荐,毕竟这是一个看脸的世界~

使用错误类型

public static void main(String[] args) {double num=1.0;switch(num) {case 1.0:System.out.println("hehe");break;case 2.0:System.out.println("haha");break;}
}

🍤 编译出错:

在这里插入图片描述

遗漏break

public static void main(String[] args) {int day = 1;switch(day) {case 1:System.out.println("星期一");// break;case 2:System.out.println("星期二");break;}
}

🍤 运行结果:

在这里插入图片描述

不能表达复杂条件

// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
// 这样的代码使用 if 很容易表达, 但是使用 switch 无法表示
if (num > 10 && num < 20) {System.out.println("hehe");
}

在这里插入图片描述

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

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

相关文章

Ubuntu18.04 下配置Clion

配置Clion 安装gcc、g、make Ubuntu中用到的编译工具是gcc©&#xff0c;g&#xff08;C&#xff09;&#xff0c;make(连接)。因此只需安装对应的工具包即可。Ubuntu下使用命令安装这些包&#xff1a; &#xff08;1&#xff09;安装gcc sudo apt install gcc&am…

解决Cannot resolve plugin org.apache.maven.plugins:xxxxxxxx

解决Cannot resolve plugin org.apache.maven.plugins:xxxxxxxx 方法一、检查配置设置 下图中三个方框圈出来的地方设置为自己的下载的maven地址&#xff0c;配置文件地址&#xff0c;仓库地址。刷新maven。 我个人试过没用&#xff0c;不过网上有的朋友用这个方法解决了。 …

Day 69-70:矩阵分解

代码&#xff1a; package dl;import java.io.*; import java.util.Random;/** Matrix factorization for recommender systems.*/public class MatrixFactorization {/*** Used to generate random numbers.*/Random rand new Random();/*** Number of users.*/int numUsers…

FANUC机器人实现2个RO输出信号互锁关联(互补)的具体方法

FANUC机器人实现2个RO输出信号互锁关联(互补)的具体方法 一般情况下,为了方便用户控制工装夹具上的电磁阀等控制工具,FANUC机器人出厂时给我们提供了8个RO输出信号,如下图所示,这8个RO信号可以各自单独使用。 那么,如果为了安全控制,需要将2个RO信号成对的进行安全互锁…

linux服务器安装redis

一、安装下载 下载安装参考文章 下载安装包地址&#xff1a;https://download.redis.io/releases/ 亲测有效&#xff0c;但是启动的步骤有一些问题 安装完成&#xff01;&#xff01;&#xff01; 二、启动 有三种启动方式 默认启动指定配置启动开机自启 说明&#xff1a…

下载JMeter的历史版本——个人推荐5.2.1版本

官网地址&#xff1a;https://archive.apache.org/dist/jmeter/binaries/

JVM-提问纯享版

一、内存区域 介绍下 Java 内存区域&#xff08;运行时数据区&#xff09;内存分配方式内存分配并发问题对象的访问定位的两种方式&#xff08;句柄和直接指针两种方式&#xff09; 二、垃圾回收 如何判断对象是否死亡&#xff08;两种方法&#xff09;。简单的介绍一下强引…

POI 导出 树形结构

参考文章&#xff1a;(327条消息) Excel树状数据绘制导出_excel导出树形结构_Deja-vu xxl的博客-CSDN博客https://blog.csdn.net/weixin_45873182/article/details/120132409?spm1001.2014.3001.5502 Overridepublic void exportPlus(String yearMonth, HttpServletRequest re…

【C语言】从零开始学习数组

&#x1f341; 博客主页:江池俊的博客 &#x1f4ab;收录专栏&#xff1a;C语言——探索高效编程的基石 &#x1f4bb; 其他专栏&#xff1a;数据结构探索 &#x1f4a1;代码仓库&#xff1a;江池俊的代码仓库 &#x1f3aa; 社区&#xff1a;C/C之家社区 &#x1f341; 如果觉…

【C++ 进阶】学习导论:C/C++ 进阶学习路线、大纲与目标

目录 一、C 学习路线 二、C 课程大纲与学习目标 &#xff08;1&#xff09;第一阶段&#xff1a;C 语言基础 &#xff08;2&#xff09;第二阶段&#xff1a;C 高级编程 &#xff08;3&#xff09;第三阶段&#xff1a;C 核心编程与桌面应用开发 &#xff08;4&#xf…

网络安全领域关键信息泄露事件引发关注

近日&#xff0c;一家知名网络安全公司发布了一份报告揭露了一起重大信息泄露事件。据称&#xff0c;该事件涉及大量敏感用户数据的泄露引发了全球网络安全领域的广泛关注。 根据报道&#xff0c;该事件发生在全球范围内涉及多个国家和组织。专家指出&#xff0c;此次泄露事件…

深入学习 Redis - 深挖经典数据类型之 zset

目录 前言 一、zset 类型 1.1、操作命令 zadd / zrange&#xff08;添加 / 查询&#xff09; zcard&#xff08;个数&#xff09; zcount&#xff08;区间元素个数&#xff09; zrevrange&#xff08;逆序展示&#xff09; zrangebyscore&#xff08;按分数找元素&#…

【UE5 多人联机教程】06-显示玩家名称

效果 可以看到玩家输入各自的名称&#xff0c;会显示到自己控制的角色头上。但是目前有一个BUG就是&#xff0c;当客户端加入游戏时会多创建一个服务端的角色。 步骤 1. 打开“BP_ThirdPersonCharacter”&#xff0c;添加一个控件组件&#xff0c;用于显示玩家名称 作为网格体…

内存函数讲解

&#x1f495;"痛苦难以避免&#xff0c;而磨难可以选择。"-->村上春树&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;数据在内存中的存储 内存函数就是管理内存数据的函数&#xff0c;包含于头文件<string.h>中 1.memcpy函数-->内存…

Jenkins插件管理切换国内源地址

一、替换国内插件下载地址 选择系统管理–>插件管理–> Available Plugins 并等待页面完全加载完成、这样做是为了把jenkins官方的插件列表下载到本地、接着修改地址文件、替换为国内插件地址 进入插件文件目录 cd /var/lib/jenkins/updatesdefault.json 为插件源地址…

tinymce实现将word中内容(文字图片等)直接粘贴至编辑器中——利用插件tinymce-powerpaste-plugin

TinyMCE是一款易用、且功能强大的所见即所得的富文本编辑器。同类程序有&#xff1a;UEditor、Kindeditor、Simditor、CKEditor、wangEditor、Suneditor、froala等等。 TinyMCE的优势&#xff1a; 开源可商用&#xff0c;基于LGPL2.1 插件丰富&#xff0c;自带插件基本涵盖日常…

给APK签名—两种方式(flutter android 安装包)

前提&#xff1a;给未签名的apk签名&#xff0c;可以先检查下apk有没有签名 通过命令行查看&#xff1a;打开终端或命令行界面&#xff0c;导入包含APK文件的目录&#xff0c;并执行以下命令&#xff1a; keytool -printcert -jarfile your_app.apk 将 your_app.apk替换为要检查…

【数据结构】--189.轮转数组

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

Rethinking the Image Fusion(PMGI)

1.摘要 本文提出了一种基于梯度和强度比例维护&#xff08;PMGI&#xff09;的快速统一图像融合网络&#xff0c;可以端到端实现各种图像融合任务&#xff0c;包括红外和可见图像融合、多曝光图像融合、医学图像融合、多焦点图像融合和全色增强。我们将图像融合问题统一为源图…

保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识

1.简介 有的小伙伴或者童鞋们可能会好奇地问&#xff0c;不是讲解和分享抓包工具了怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解&#xff0c;你就能越掌握Fiddler的使用方法&#xff0c;反过来你越使用Fiddler&#xff0c;就越能帮助你了解HTTP协议。 Fid…