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

家用路由器和企业路由器的区别?
一、家用路由器 家用路由器路由器交换机 它只有一个WAN口和一个LAN口,WAN口接公网一个地址,LAN口接你电脑一个IP地址,完全符合路由器的设计,而因为家里如果用了,说明要接多个电脑,那么如果还需要对每个接口…...
Gin简介(Go web基础知识)
Gin简介 https://geektutu.com/post/quick-go-gin.html我是从这个网站上面摘录的,就是做个笔记,仅分享。膜拜极客兔兔大佬 Go特性: 快速:路由不使用反射,基于Radix树,内存占用少。 中间件:HT…...
HBase的Bulk Load流程
目录 1. 数据准备 2. 文件移动 3. 加载数据 4. Region处理 5. 元数据更新 6. 完成加载 7. 清理 8. 异常处理 LoadIncrementalHFiles(也称为Bulk Load)是HBase中一种将大量数据高效导入到HBase表的机制。以下是LoadIncrementalHFiles的主要流程步…...
vue中图片替换 遇到问题
问题: 在img标签里动态绑定路径:<img v-bind:src"imgSrc" /> data里这样写是错误的:imgSrc:xx/xx.png 这样渲染的路径会有问题,导致出不来图片 解决了 是这样的 data(){return(){imgSrc:require("../…...
Android 观察者模式
在Android中,观察者模式(Observer Pattern)是一种常用的设计模式,用于在对象之间建立一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Android开发中࿰…...

阿里云部署MySQL、Redis、RocketMQ、Nacos集群
文章目录 🔊博主介绍🥤本文内容MySQL集群配置云服务器选购CPU选择内存选择云盘选择ESSD AutoPL云盘块存储性能(ESSD) 镜像选择带宽选择密码配置注意事项 安装docker和docker-compose部署MySQL三主六从半同步集群一主二从同步集群规…...

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

哈希表(c++)
1、介绍 哈希表,也称为散列表,是一种非常高效的数据结构。它通过将键(Key)映射到数组的特定位置来快速查找、插入和删除数据。这个映射过程由哈希函数(Hash Function)完成,该函数将键转化为一个…...
C#基础-标识符命名规则
目录 1、标识符定义 2、遵循规则 3、标识符的例子 4、MSDN中英文解释 英文...

Zabbix Web界面中文汉化
要想达到上图的效果,第一步先查看 /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版本:1.8.19 arduino ide 中文设置: file >> preferences >> arduino IDE 获取 ESP32 开发环境:打开 Arduino IDE ,找到 文件>首选项 ,将 ESP32 的配置链接填入附加开发板管理网…...

Spring Boot从入门到实战
课程介绍 本课程从SpringBoot的最基础的安装、配置开始到SpringBoot的日志管理、Web业务开发、数据存储、数据缓存,安全控制及相关企业级应用,全程案例贯穿,案例每一步的都会讲解实现思路,全程手敲代码实现。让你不仅能够掌Sprin…...
Spring Boot(七十一):整合RateLimiter实现接口限流
1 简介 RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证。如果必要的话,每个acquire() 会阻塞当前线程直到许可证可用后获取该许可证。一旦获取到许可证,不需要再释放许可证。 RateLimiter使用的是一种叫令牌桶的流控算法,RateLimiter会按照一定的频率…...

通过jsDelivr实现Github的图床CDN加速
最近小伙伴们是否发现访问我的个人博客http://xiejava.ishareread.com/图片显示特别快了? 我的博客的图片是放在github上的,众所周知的原因,github访问不是很快,尤其是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实例
背景 本文的背景,是因为我在开发高德地图时,需要自定义高德比例尺位置和样式;但结果查看了AMap Flutter插件和AMap SDK源码后,发现AMap无法添加自定义MyMethodCallHandler的实现类! why? 源码 在Flutte…...

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

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

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...