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

初始Java篇(JavaSE基础语法)(2)(逻辑控制)

个人主页(找往期文章包括但不限于本期文章中不懂的知识点):我要学编程(ಥ_ಥ)-CSDN博客

目录

逻辑控制

顺序结构

分支结构

if语句

switch 语句 

循环结构

while 循环

for 循环

do while 循环

输入输出

输出到控制台

从键盘输入

猜数字游戏


逻辑控制

Java同样和C语言一样是有三种结构:顺序结构,选择结构,循环结构。

顺序结构

顺序结构就是程序在执行时,按照一行一行代码的顺序执行下去。

分支结构

if语句

语法格式:

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

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

好啦!大部分内容和C语言差不多,我们就直接上练习。

【练习】

1. 判断一个数字是奇数还是偶数。

public class Test {public static void main(String[]args){//从键盘上输入数据Scanner scanner = new Scanner(System.in);int i = scanner.nextInt();if(i % 2 == 1){System.out.println("是奇数");} else{System.out.println("是偶数");}}  
}

至于那个从键盘上输入数据,我们在后面学习输入数据时会学习。 

2. 判断一个数字是正数,负数,还是零。

public class Test {public static void main(String[]args){Scanner scanner = new Scanner(System.in);int i = scanner.nextInt();if(i > 0) {System.out.println("是正数");} else if (i < 0) {System.out.println("是负数");} else {System.out.println("是0");}}  
}

3. 判断一个年份是否为闰年

public class Test {public static void main(String[]args){Scanner scanner = new Scanner(System.in);int year = scanner.nextInt();if (((year % 4 == 0)&&(year % 100 != 0)) || (year % 400 == 0)){System.out.println("是闰年");}else {System.out.println("不是闰年");}}  
}

注意:这里的代码风格和C语言是不一样的。

下面是C语言的做法:

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

switch 语句 

基本语法:

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

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

练习:根据 day 的值输出星期几。

public class Test {public static void main(String[] args) {//根据 day 的值输出星期几Scanner scanner = new Scanner(System.in);int day = scanner.nextInt();switch(day){case 1:System.out.println("星期一");break;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:System.out.println("星期六");break;case 7:System.out.println("星期日");break;default:System.out.println("输入错误");break;}}
}

【注意事项】

1. 多个case后面的常量值不可以重复。

2. switch的括号内只能是以下类型的表达式: 基本类型:byte、char、short、int,注意不能是long类型 引用类型:String常量串、枚举类型。

3. switch 不能表达复杂的条件。当有复杂条件需要判断时,我们就需要用到if语句了。

4. switch 虽然支持嵌套, 但是很丑,一般不推荐。

综上, 我们发现, switch 的使用局限性是比较大的。

循环结构

while 循环

基本语法格式:

//循环条件的结果也要是布尔类型
while(循环条件){循环语句;
}

循环条件为 true, 则执行循环语句; 否则结束循环。

练习1:打印 1 - 10 的数字。

public class Test {public static void main(String[] args) {int n = 1;//注意这里的结果一定要是布尔类型while(n <= 10){System.out.print(n+" ");n++;}}
}

2. 计算 1 - 100 的和。

public class Test {public static void main(String[] args) {int n = 1;int sum = 0;while(n <= 100){sum += n;n++;}System.out.println(sum);}
}

3. 计算 5 的阶乘 

public class Test {public static void main(String[] args) {int ret = 1;int n = 1;while(n <= 5){ret *= n;n++;}System.out.println(ret);}
}

4. 计算 1! + 2! + 3! + 4! + 5!

public class Test {public static void main(String[] args) {int sum = 0;int n = 1;int ret = 1;while(n <= 5){ret *= n;sum += ret;n++;}System.out.println(sum);}
}

注意事项 :

1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }。 2. 和 if 类似, while 后面的 { 建议和 while 写在同一行。

3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行。

break

break 的功能是让循环提前结束。

练习:找到 100 - 200 中第一个是 3 的倍数的数字。

public class Test {public static void main(String[] args) {int n = 100;while(n <= 200){if(n % 3 == 0){System.out.println(n);break;}n++;}}
}

当执行到break时,就会跳出循环。 

continue

continue 的功能是跳过本次循环剩下的部分, 进入下次循环。

练习:找到 100 - 200 中第一个是 3 的倍数的数字。

public class Test {public static void main(String[] args) {int n = 100;while(n <= 200){if(n % 3 != 0){n++;//这个不能少continue;}System.out.println(n);break;}}
}

执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句。 

for 循环

基本语法格式:

for(表达式1;布尔表达式2;表达式3){表达式4;
}

表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次。

表达式2: 循环条件,满足,则循环继续,否则循环结束。

表达式3: 循环变量更新方式。 

(和while循环类似) 1. 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { } 2. 和 if 类似, for 后面的 { 建议和 while 写在同一行. 3. 和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行. 4. 和while循环一样,结束单趟循环用continue,结束整个循环用break。

do while 循环

基本语法格式:

do{循环语句;
}while(循环条件);//这里的分号不能少

do while循环的特点是不管条件满不满足,一上来就会执行循环语句。因此,我们在写一个游戏的时候,一般都会使用do while循环。

基本用法和while循环差不多。

输入输出

输出到控制台

基本语法:

System.out.println(msg); // 输出一个字符串, 带换行
System.out.print(msg); // 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出System.out.println("输出切换行"); 
System.out.print("输出不换行"); 
System.out.printf("%s\n", "格式化输出"); 

println 输出的内容自带 \n, print 不带 \n。

printf 的格式化输出方式和 C 语言的 printf 是基本一致的。 

格式化字符串

转换符类型举例输出的结果
d十进制整数("%d", 100)100
x十六进制整数("%x", 100)64
o八进制整数("%o", 100)

144

f定点浮点数("%f", 100f)100.000000
e指数浮点数("%e", 100f)1.000000e+02
g通用浮点数("%g", 100f)100.000
a十六进制浮点数("%a", 100)0x1.9p6
s字符串("%s", 100)100
c字符("%c", ‘1’)1
b布尔值("%b", 100)true
h散列码("%h", 100)64
%百分号("%.2f%%", 2/7f)0.29%

这个表格没必要记住, 用到的时候根据需要查一下就行了,实在要记住,就记住一些常见的值。 

从键盘输入

使用 Scanner 读取字符串/整数/浮点数。

举例:

public class Test {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入你的名字:");String name = scanner.nextLine();System.out.print("请输入你的年龄:");int age =scanner.nextInt();System.out.println("你的信息如下:");System.out.println("名字"+name+"\n"+"年龄"+age);}
}

这个输入类似创建一个变量。可以把Scanner看成一个输入变量类型,后面的变量名可以随意取,不一定要是scanner,也可以是a,b……后面的new Scanner是一起的(固定的)。System.in的意思是从键盘输入。而后面的nextLine,nextInt是分别输入一个字符串和一个整形。与nextLine类似的还有一个next,这个是遇到空格就停止读入(即使你输入了:我 要 学 编程,它也只会读取“我”)。

还有一个点就是:当我们使用Scanner输入数据的时候,在程序的末尾要加上 sc.close(); 这个就类似我们在C语言里学习的文件操作一样,打开文件后,在程序结束时要加上一个fclose(),来关闭文件。当然不加上这句话也没有关系。

练习:使用 Scanner 循环读取 N 个数字,并求取其平均值。 

public class Test {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = 0;//记录读取了几个数据double avg = 0;int sum  = 0;//类似C语言里的while(scanf("%d", &n) != EOF)//当输入ctrl + D时,就会停止读取数据while(scanner.hasNextInt()){int j =  scanner.nextInt();sum += j;n++;}avg = sum*1.0 / n;System.out.println(avg);}
}

:当循环输入多个数据的时候, 使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + Z, Linux / Mac 上使用 ctrl + D)这里指的是CMD上。我们用的不是CMD,而是IDEA,因此就是输入ctrl + D。

猜数字游戏(含源码)

我们之前在学习C语言的循环时,也写了一个猜数字的小游戏,现在我们就用Java来实现一下。

这里我们就简单了解一下规则:

游戏规则: 系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 "猜小了", 如果输入的数字比该随机数大, 提示 "猜大了" , 如果输入的数字和随机数相等, 则提示 ",恭喜你,猜对了" 。

逻辑实现具体可看下面这篇文章:利用C语言的分支循环少量的函数知识写一个猜数字的小游戏-CSDN博客

源码: 

public class Tset {public static void game() {Scanner scanner = new Scanner(System.in);Random random = new Random();//生成随机数的种子int num= random .nextInt(100)+1;生成1~100之间的随机数int i = 5;do{i--;System.out.print("请输入你要猜的数字:");int n = scanner.nextInt();if(n > num){System.out.print("猜大了,请重新猜!");System.out.println("你还剩"+i+"次机会!");} else if (n < num) {System.out.print("猜小了,请重新猜!");System.out.println("你还剩"+i+"次机会!");}else {System.out.println("恭喜你,猜对了");break;}}while(i != 0);}public static void menu() {System.out.println("***************************************");System.out.println("******         猜数字游戏          ******");System.out.println("******    1. play    0. exit     ******");System.out.println("***************************************");}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int input = 0;do{menu();//打印菜单System.out.print("请选择你要进行的操作:");input = scanner.nextInt();switch(input){case 1:System.out.println("游戏开始,请做好准备!");game();break;case 0:System.out.println("游戏退出");break;default:System.out.println("选择错误,请重新选择");break;}}while(input != 0);}
}

这里有一个关于生成随机数的工具:Random,这个是用来生成一个随机数的种子的(类似C语言里的srand函数)。如果我们在  Random random = new Random(); 这个语句的括号里随机输入一个值,那么它生成的随机数就是伪随机数了。例如:

public class Test {public static void main(String[] args) {Random random = new Random(123);//随便写的一个数int num = random.nextInt();//这个sum的值是一个定值System.out.println(num);}
}

int num= random .nextInt(100)+1;  这个语句的意思是生成一个1~100的随机数。括号里的100相当于%100的意思,也就是生成0~99的数字,我们再加上1,就变成1~100了。

至于  public static void game() 和  public  static void menu() 这个我们在下一篇博客再一起来学习。

好啦!本期JavaSE基础语法的学习到此就结束了!下一期,我们再一起学习吧!

相关文章:

初始Java篇(JavaSE基础语法)(2)(逻辑控制)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 目录 逻辑控制 顺序结构 分支结构 if语句 switch 语句 循环结构 while 循环 for 循环 do while 循环 输入输出 输出到控制台 从键盘输入 …...

家用路由器和企业路由器的区别?

一、家用路由器 家用路由器路由器交换机 它只有一个WAN口和一个LAN口&#xff0c;WAN口接公网一个地址&#xff0c;LAN口接你电脑一个IP地址&#xff0c;完全符合路由器的设计&#xff0c;而因为家里如果用了&#xff0c;说明要接多个电脑&#xff0c;那么如果还需要对每个接口…...

Gin简介(Go web基础知识)

Gin简介 https://geektutu.com/post/quick-go-gin.html我是从这个网站上面摘录的&#xff0c;就是做个笔记&#xff0c;仅分享。膜拜极客兔兔大佬 Go特性&#xff1a; 快速&#xff1a;路由不使用反射&#xff0c;基于Radix树&#xff0c;内存占用少。 中间件&#xff1a;HT…...

HBase的Bulk Load流程

目录 1. 数据准备 2. 文件移动 3. 加载数据 4. Region处理 5. 元数据更新 6. 完成加载 7. 清理 8. 异常处理 LoadIncrementalHFiles&#xff08;也称为Bulk Load&#xff09;是HBase中一种将大量数据高效导入到HBase表的机制。以下是LoadIncrementalHFiles的主要流程步…...

vue中图片替换 遇到问题

问题&#xff1a; 在img标签里动态绑定路径&#xff1a;<img v-bind:src"imgSrc" /> data里这样写是错误的&#xff1a;imgSrc:xx/xx.png 这样渲染的路径会有问题&#xff0c;导致出不来图片 解决了 是这样的 data(){return(){imgSrc:require("../…...

Android 观察者模式

在Android中&#xff0c;观察者模式&#xff08;Observer Pattern&#xff09;是一种常用的设计模式&#xff0c;用于在对象之间建立一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。在Android开发中&#xff0…...

阿里云部署MySQL、Redis、RocketMQ、Nacos集群

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容MySQL集群配置云服务器选购CPU选择内存选择云盘选择ESSD AutoPL云盘块存储性能&#xff08;ESSD&#xff09; 镜像选择带宽选择密码配置注意事项 安装docker和docker-compose部署MySQL三主六从半同步集群一主二从同步集群规…...

day05-店铺营业状态设置

1. Redis入门 1.1 Redis简介 Redis 是一个基于内存的 key-value 结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。 官网&#xff1a; https://redis.io 中文网&#xff1a; https://www.redis.net.cn/ 主要特点&#xff1a; 基于内存存储&#xff0c;读写性能高…...

哈希表(c++)

1、介绍 哈希表&#xff0c;也称为散列表&#xff0c;是一种非常高效的数据结构。它通过将键&#xff08;Key&#xff09;映射到数组的特定位置来快速查找、插入和删除数据。这个映射过程由哈希函数&#xff08;Hash Function&#xff09;完成&#xff0c;该函数将键转化为一个…...

C#基础-标识符命名规则

目录 1、标识符定义 2、遵循规则 3、标识符的例子 4、MSDN中英文解释 英文...

Zabbix Web界面中文汉化

要想达到上图的效果&#xff0c;第一步先查看 /usr/share/zabbix/assets/fonts/ [rootservice yum.repos.d]# ll /usr/share/zabbix/assets/fonts/ 总用量 0 lrwxrwxrwx. 1 root root 33 3月 23 16:58 graphfont.ttf -> /etc/alternatives/zabbix-web-font 继续查看graph…...

esp32CAM环境搭建(arduino+MicroPython+thonny+固件)

arduino ide 开发工具 arduino版本&#xff1a;1.8.19 arduino ide 中文设置&#xff1a;​ file >> preferences >> ​ arduino IDE 获取 ESP32 开发环境&#xff1a;打开 Arduino IDE &#xff0c;找到 文件>首选项 ,将 ESP32 的配置链接填入附加开发板管理网…...

Spring Boot从入门到实战

课程介绍 本课程从SpringBoot的最基础的安装、配置开始到SpringBoot的日志管理、Web业务开发、数据存储、数据缓存&#xff0c;安全控制及相关企业级应用&#xff0c;全程案例贯穿&#xff0c;案例每一步的都会讲解实现思路&#xff0c;全程手敲代码实现。让你不仅能够掌Sprin…...

Spring Boot(七十一):整合RateLimiter实现接口限流

1 简介 RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证。如果必要的话,每个acquire() 会阻塞当前线程直到许可证可用后获取该许可证。一旦获取到许可证,不需要再释放许可证。 RateLimiter使用的是一种叫令牌桶的流控算法,RateLimiter会按照一定的频率…...

通过jsDelivr实现Github的图床CDN加速

最近小伙伴们是否发现访问我的个人博客http://xiejava.ishareread.com/图片显示特别快了&#xff1f; 我的博客的图片是放在github上的&#xff0c;众所周知的原因&#xff0c;github访问不是很快&#xff0c;尤其是hexo博客用github做图床经常图片刷不出来。一直想换图床&…...

Kafka系列之:Connect 中的错误报告

Kafka系列之:Connect 中的错误报告 Kafka Connect 提供错误报告来处理各个处理阶段遇到的错误。默认情况下,转换期间或转换中遇到的任何错误都会导致连接器失败。每个连接器配置还可以通过跳过此类错误、选择性地将每个错误以及失败操作的详细信息和有问题的记录(具有各种详…...

MySQL面试题--开发(最全,涵盖SQL基础、架构、事务)

MySQL面试题--事务https://mp.csdn.net/mp_blog/creation/editor/136947072 MySQL面试题--MySQL内部技术架构https://blog.csdn.net/Timebro/article/details/136946046?spm1001.2014.3001.5501 MySQL面试题--最全面-索引https://blog.csdn.net/Timebro/article/details/136…...

【移动端】Flutter 获取Android AMap实例

背景 本文的背景&#xff0c;是因为我在开发高德地图时&#xff0c;需要自定义高德比例尺位置和样式&#xff1b;但结果查看了AMap Flutter插件和AMap SDK源码后&#xff0c;发现AMap无法添加自定义MyMethodCallHandler的实现类&#xff01; why&#xff1f; 源码 在Flutte…...

什么是PLC物联网关?PLC物联网关有哪些功能?

在数字化浪潮的推动下&#xff0c;工业物联网&#xff08;IIoT&#xff09;正逐步成为推动制造业智能化转型的关键力量。而在这一变革中&#xff0c;PLC物联网关扮演着至关重要的角色。今天&#xff0c;就让我们一起走进PLC物联网关的世界&#xff0c;了解它的定义、功能&#…...

R-CNN笔记

目标检测之R-CNN论文精讲&#xff0c;RCNN_哔哩哔哩_bilibili 论文背景 在该论文提出之前&#xff0c;主流的目标检测思路是&#xff1a; 将一幅图片划分成很多个区域&#xff0c;单独提取出来 对于每个区域使用传统的特征提取方法提取 提取结束后可以使用以为特征向量表示 可以…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...