当前位置: 首页 > news >正文

【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.lryc.cn/news/99258.html

相关文章:

  • Oracle恢复删除的数据
  • (无人机方向)ros小白之键盘控制无人机(终端方式)
  • 【python学习笔记】argparse --- 命令行选项、参数和子命令解析器
  • 【Java框架】RPC远程调用
  • 云原生全栈体系(一)
  • 【【51单片机直流电机调速】】
  • 【Spring Boot】
  • 使用docker 部署自己的chatgpt
  • Python适配器模式介绍、使用方法
  • 【数据结构】复杂度
  • 【读点论文】PP-YOLOE: An evolved version of YOLO,面向友好部署的模型设计,为项目后续产业落地提供了更加有效的参考
  • 微服务入门---SpringCloud(二)
  • 51单片机IO口控制
  • ERROR 1064 - You have an error in your SQL syntax;
  • leetcode做题笔记46
  • 快问快答JS面向对象面试题
  • googlenet论文理解
  • OnnxRuntime TensorRT OpenCV::DNN性能对比(YoloV8)实测
  • 【QT 网络云盘客户端】——获取用户文件列表信息
  • 从0到1,无代码开发如何简化产品创新流程
  • select、epoll 的快速核心理解
  • HTTP和HTTPS的区别
  • 分布式异步任务处理组件(二)
  • Jenkins 拉取 GitHub 私有仓库失败问题
  • 小程序 多层次对象数组的赋值、动态赋值
  • angular踩坑
  • C#时间轴曲线图形编辑器开发1-基本功能
  • elasticsearch查询操作(DSL语句方式)
  • JavaScript详解
  • 电缆振荡波局部放电检测定位技术