当前位置: 首页 > 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;单独提取出来 对于每个区域使用传统的特征提取方法提取 提取结束后可以使用以为特征向量表示 可以…...

别再手动改路径了!用LabVIEW + MATLAB Script做自动化测试,这份环境配置指南让你效率翻倍

LabVIEW与MATLAB深度整合&#xff1a;构建自动化测试系统的工程实践指南在工业自动化与测试测量领域&#xff0c;LabVIEW和MATLAB的组合堪称黄金搭档。LabVIEW擅长硬件接口和实时控制&#xff0c;而MATLAB在算法开发和数据分析方面具有无可比拟的优势。本文将深入探讨如何将两者…...

别再死记硬背SMO公式了!用Python手写一个SVM分类器,带你一步步拆解SMO核心逻辑

用Python手写SVM分类器&#xff1a;代码驱动理解SMO算法核心在机器学习领域&#xff0c;支持向量机(SVM)以其优秀的分类性能和坚实的数学基础著称。然而&#xff0c;许多学习者在理解其核心算法——序列最小优化(SMO)时&#xff0c;往往被复杂的数学推导所困扰。本文将采用一种…...

照着用就行:2026 最新降AIGC软件测评与推荐

2026年真正好用的AI论文降重与改写工具&#xff0c;核心看降重效果、去AI味、格式保留、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...

FT231XQ USB串口桥接板设计解析与实战应用指南

1. 项目概述&#xff1a;从FT232R到FT231XQ的USB串口桥接板演进在嵌入式开发和硬件调试的日常工作中&#xff0c;一个可靠、小巧且功能清晰的USB转串口&#xff08;UART&#xff09;桥接板&#xff08;Breakout Board&#xff0c; 简称BoB&#xff09;几乎是工程师手边的标配工…...

可解释AI新突破:基于局部帕累托最优的模型解释框架

1. 项目概述&#xff1a;当AI模型成为“黑箱”&#xff0c;我们如何撬开它&#xff1f;在机器学习项目里摸爬滚打十几年&#xff0c;我见过太多这样的场景&#xff1a;团队花大力气训练出一个准确率高达95%的复杂模型&#xff08;比如深度神经网络&#xff09;&#xff0c;业务…...

从开题到定稿零焦虑:okbiye AI 论文写作,帮你把毕业季的 “大山” 变成坦途

okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPT毕业论文 - Okbiye智能写作https://www.okbiye.com/ai/bylw 毕业季的深夜&#xff0c;宿舍台灯下的屏幕亮着刺眼的光&#xff0c;文档里的字数停留在三位数&#xff0c;而 deadline 正一天天逼近。你是…...

破解材料数据荒:合成数据与随机森林预测聚合物阻燃性能

1. 项目概述与核心挑战在材料研发领域&#xff0c;尤其是涉及公共安全的聚合物阻燃性研究&#xff0c;传统实验方法正面临巨大瓶颈。想象一下&#xff0c;你是一位材料工程师&#xff0c;需要设计一种用于高铁内饰或高层建筑电缆护套的新型聚合物&#xff0c;其阻燃性能必须满足…...

TV Bro电视浏览器:为智能电视打造的最佳遥控器上网解决方案

TV Bro电视浏览器&#xff1a;为智能电视打造的最佳遥控器上网解决方案 【免费下载链接】tv-bro Simple web browser for android optimized to use with TV remote 项目地址: https://gitcode.com/gh_mirrors/tv/tv-bro 还在为智能电视上网操作不便而烦恼吗&#xff1f…...

独立开发者利用taotoken模型广场为不同任务选择性价比最优模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者利用taotoken模型广场为不同任务选择性价比最优模型 对于独立开发者而言&#xff0c;在有限的预算内高效完成多样化的开…...

3大突破性功能:用HiveWE革新你的魔兽争霸III地图创作体验

3大突破性功能&#xff1a;用HiveWE革新你的魔兽争霸III地图创作体验 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为传统魔兽争霸III编辑器缓慢的加载速度和复杂的操作界面而烦恼吗&#xff1f;Hive…...