【JavaSE】程序逻辑控制

目录

1. 顺序结构

2. 分支结构

2.1 if语句

2.1.1 语法格式1

2.1.2 语法格式2

2.1.3 语法格式3  

2.1.4 练习

2.1.5 注意事项

2.2 switch 语句

3. 循环结构

3.1 while循环

3.1.1 语法格式

3.1.2 代码示例

3.1.3 注意事项

3.2 break

3.3 continue

3.4 for循环

3.4.1 语法格式

3.4.2 代码示例

3.4.3 注意事项 (和while循环类似)

3.5 do while 循环

3.5.1 语法格式

3.5.2 代码示例

3.5.3 注意事项

4. 输入输出

4.1 输出到控制台

4.1.1 基本语法

4.1.2 代码示例

4.1.3 格式化字符串

4.2 从键盘输入

5. 猜数字游戏


1. 顺序结构

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

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

2. 分支结构

2.1 if语句

2.1.1 语法格式1

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

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

int score = 92;
if(score >= 90){System.out.println("吃个冰淇淋!!!");
}

2.1.2 语法格式2

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

比如:小明,如果这次考到90分以上,给你奖励一个冰淇淋,否则不能吃。

int score = 92;
if(score >= 90){System.out.println("吃个冰淇淋!!!");
}else{System.out.println("不能吃!!!");
}

2.1.3 语法格式3  

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

比如:考虑到学生自尊,不公开分数排名,因此:

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

按照上述办法通知学生成绩。

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("错误数据");
}

2.1.4 练习

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

int num = 10;
if (num % 2 == 0) {System.out.println("num 是偶数");
} else {System.out.println("num 是奇数");
}

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

int num = 10;
if (num > 0) {
System.out.println("正数");
} else if (num < 0) {
System.out.println("负数");
} else {
System.out.println("0");
}

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

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("不是闰年");}
}

2.1.5 注意事项

  • 代码风格

虽然两种方式都是合法的, 但是 Java 中更推荐使用风格1, { 放在 if / else 同一行,代码更紧凑。

  • 分号问题

此处多写了一个 分号,导致分号成为了 if 语句的语句体, { } 中的代码已经成为了和一个 if 无关的代码块。

  • 悬垂 else 问题

if / else 语句中可以不加 大括号,但是也可以写语句(只能写一条语句), 此时 else 是和最接近的 if 匹配,但是实际开发中我们 不建议 这么写,最好加上大括号

2.2 switch 语句

基本语法

执行流程:

1. 先计算表达式的值

2. case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束

3. 当表达式的值没有与所列项匹配时,执行default

代码示例 : 根据 day 的值输出星期
int day = 1;
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、charshortint,注意不能是long类型

        引用类型:String常量串、枚举类型

        

3. break 不要遗漏, 否则会失去 "多分支选择" 的效果

4. switch 不能表达复杂的条件

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

代码的美观程度也是一个重要的标准. 毕竟这是看脸的世界

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

3. 循环结构

3.1 while循环

3.1.1 语法格式

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

3.1.2 代码示例

代码示例1:打印 1 - 10 的数字

int num = 1;
while (num <= 10) {System.out.println(num);num++;
}

代码示例2: 计算 1 - 100 的和

int n = 1;
int result = 0;
while (n <= 100) {result += n;n++;
}
System.out.println(num);// 执行结果
5050

代码示例3:计算 5 的阶乘

int n = 1;
int result = 1;
while (n <= 5) {
result *= n;
n++;
}
System.out.println(num);// 执行结果
120

代码示例4:计算 1! + 2! + 3! + 4! + 5!

int num = 1;
int sum = 0;
// 外层循环负责求阶乘的和
while (num <= 5) {int factorResult = 1;int tmp = 1;// 里层循环负责完成求阶乘的细节.while (tmp <= num) {factorResult *= tmp;tmp++;}sum += factorResult;num++;
}
System.out.println("sum = " + sum);

这里我们发现,当一个代码中带有多重循环的时候, 代码的复杂程度就大大提高了,而比较复杂的代码就更容易出错。后面我们会采用更简单的办法来解决这个问题。

3.1.3 注意事项

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

2. if 类似,while 后面的 { 建议和 while 写在同一行

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

int num = 1;
while (num <= 10); {System.out.println(num);num++;
}// 执行结果
[无任何输出, 程序死循环]

此时 ; while 的语句体(这是一个空语句),,实际的 { } 部分和循环无关。 此时循环条件 num <= 10 恒成立,致代码死循环了。

3.2 break

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

代码示例: 找到 100 - 200 中第一个 3 的倍数

int num = 100;
while (num <= 200) {if (num % 3 == 0) {System.out.println("找到了 3 的倍数, 为:" + num);break;}num++;
}// 执行结果
找到了 3 的倍数, 为:102

执行到 break 就会让循环结束。

3.3 continue

continue 的功能是跳过这次循环, 立即进入下次循环。

代码示例: 找到 100 - 200 中所有 3 的倍数

int num = 100;
while (num <= 200) {if (num % 3 != 0) {num++; // 这里的 ++ 不要忘记! 否则会死循环.continue;}System.out.println("找到了 3 的倍数, 为:" + num);num++;
}

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

3.4 for循环

3.4.1 语法格式

  • 表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次
  • 表达式2: 循环条件,满则循环继续,否则循环结束
  • 表达式3: 循环变量更新方式

执行过程

①②③④--->②③④--->②③④--->②③④--->②③④--->②③④--->...--->②为false,循环结束。

3.4.2 代码示例

代码示例1:打印 1 - 10 的数字

for (int i = 1; i <= 10; i++) {System.out.println(i);
}

代码示例2:计算 1 - 100 的和

int sum = 0;
for (int i = 1; i <= 100; i++) {sum += i;
}
System.out.println("sum = " + sum);// 执行结果
5050

代码示例3:计算 5 的阶乘

int result = 1;
for (int i = 1; i <= 5; i++) {result *= i;
}
System.out.println("result = " + result);
代码示例4: 计算 1! + 2! + 3! + 4! + 5!
int sum = 0;
for (int i = 1; i <= 5; i++) {int tmp = 1;for (int j = 1; j <= i; j++) {tmp *= j;}sum += tmp;
}
System.out.println("sum = " + sum);

3.4.3 注意事项 (while循环类似)

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

2. if 类似。for 后面的 { 建议和 while 写在同一行

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

4. while循环一样,结束单趟循环用continue,结束整个循环用break

3.5 do while 循环

3.5.1 语法格式

先执行循环语句, 再判定循环条件,循环条件成立则继续执行,否则循环结束。

3.5.2 代码示例

打印 1 - 10

int num = 1;
do {System.out.println(num);num++;
} while (num <= 10);

3.5.3 注意事项

1. do while 循环最后的分号不要忘记

2. 一般 do while 很少用到, 更推荐使用 for while

4. 输入输出

4.1 输出到控制台

4.1.1 基本语法

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

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

4.1.2 代码示例

System.out.println("hello world");
int x = 10;
System.out.printf("x = %d\n", x)

4.1.3 格式化字符串

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

4.2 从键盘输入

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

import java.util.Scanner; // 需要导入 util 包Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = sc.nextLine();
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的工资:");
float salary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
sc.close(); // 注意, 要记得调用关闭方法// 执行结果
请输入你的姓名:
张三
请输入你的年龄:
18
请输入你的工资:
1000
你的信息如下:
姓名: 张三
年龄:18
工资:1000.0

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

Scanner sc = new Scanner(System.in);
int sum = 0;
int num = 0;
while (sc.hasNextInt()) {int tmp = sc.nextInt();sum += tmp;num++;
}
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
sc.close();// 执行结果
10
40.0
50.5
^Z
sum = 150.5
avg = 30.1

注意事项:当循环输入多个数据的时候, 使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl + d)

5. 猜数字游戏

5.1 游戏规则

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

5.2 参考代码

import java.util.Random;
import java.util.Scanner;class Test {public static void main(String[] args) {Random random = new Random(); // 默认随机种子是系统时间Scanner sc = new Scanner(System.in);int toGuess = random.nextInt(100);// System.out.println("toGuess: " + toGuess);while (true) {System.out.println("请输入要输入的数字: (1-100)");int num = sc.nextInt();if (num < toGuess) {System.out.println("低了");} else if (num > toGuess) {System.out.println("高了");} else {System.out.println("猜对了");break;}}sc.close();}
}

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

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

相关文章

scratch3编程05-画笔绘制圆及与圆相关的图形

目录 一&#xff0c;圆 1&#xff0c;空心圆 2&#xff0c;实心圆 3&#xff0c;嵌套在一起的圆 4&#xff0c;圆环 二&#xff0c;五角星 1&#xff0c;空心五角星 1&#xff09;思路 2&#xff09;完整的程序 2&#xff0c;实心五角星 1&#xff09;思路 2&…

RK3568笔记三十三: helloworld 驱动测试

若该文为原创文章&#xff0c;转载请注明原文出处。 报着学习态度&#xff0c;接下来学习驱动是如何使用的&#xff0c;从简单的helloworld驱动学习起。 开始编写第一个驱动程序—helloworld 驱动。 一、环境 1、开发板&#xff1a;正点原子的ATK-DLRK3568 2、系统&#xf…

d3dcompiler_43.dll文件是什么?如何快速有效的解决d3dcompiler_43.dll文件丢失问题

dcompiler_43.dll 是一个Windows系统中的系统文件&#xff0c;属于DirectX软件的一部分。这个dcompiler_43.dll&#xff08;动态链接库&#xff09;文件主要用于处理与3D图形编程有关的任务&#xff0c;是运行许多游戏和高级图形程序必需的组件之一。那么如果电脑丢失d3dcompil…

香蕉派BPI-Wifi6迷你路由器公开发售

Banana Pi BPI-Wifi6 Mini 公开发售。 Banana Pi BPI-Wifi6 Mini 开源路由器采用Triductor TR6560 TR5220 wifi SOC设计&#xff0c;是一款迷你尺寸的wifi6路由器解决方案。内置高性能双核ARM Cortec A9处理器用于WIFI报文转发或智能业务处理&#xff0c;内置高性能LSW和硬件N…

ubuntu 上vscode +cmake的debug调试配置方法

在ubuntu配置pcl点云库以及opencv库的时候&#xff0c;需要在CMakeLists.txt中加入相应的代码。配置完成后&#xff0c;无法调试&#xff0c;与在windows上体验vs studio差别有点大。 找了好多调试debug配置方法&#xff0c;最终能用的有几种&#xff0c;但是有一种特别好用&a…

ubuntu部署minio集群

minio集群介绍 官方文档&#xff1a;https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html 本方案采用在多节点多驱动器 (MNMD) 或“分布式”配置部署 MinIO。 MNMD 部署提供企业级性能、可用​​性和可扩展性&#…

jmeter-beanshell学习4-beanshell截取字符串

再写个简单点的东西&#xff0c;截取字符串&#xff0c;参数化文件统一用csv&#xff0c;然后还要用excel打开&#xff0c;如果是数字很容易格式就乱了。有同事是用双引号把数字引起来&#xff0c;报文里就不用加引号了&#xff0c;但是这样beanshell处理起来&#xff0c;好像容…

Facebook社交平台的未来发展趋势分析

随着科技和社交需求的不断演变&#xff0c;Facebook作为全球最大的社交平台之一&#xff0c;其未来发展的趋势备受关注。从技术创新到社会影响&#xff0c;Facebook正在经历着前所未有的变化和挑战。本文将探讨Facebook未来发展的几个关键趋势&#xff0c;并分析其可能的影响和…

MySQL MVCC

总结自小林coding&#xff0c;bojiangzhou 脏读、不可重复读、幻读 说的都是并发读取的问题&#xff0c;最简单的方式就是给记录加一把锁&#xff0c;不管是更新、读取记录都需要竞争到这把锁之后才能操作。但这种方式的并发性能可想而知会有多么低。 于是 InnoDB 就设计了MVC…

LeetCode HOT100(二)双指针

移动0 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 解法1&#xff1a;双指针交换 指针L&…

“论基于构件的软件开发方法及其应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 基于构作的软件开发 (Component-Based Software Development&#xff0c;CBSD) 是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。基于构件的软件系统中的构件可以是COTS &#xff08;Commercial-Off-the-Shelf&#xff09;构件&#x…

Spring Boot轻松整合Minio实现文件上传下载功能

一、Linux 安装Minio 安装 在/root/xxkfz/soft目录下面创建文件minio文件夹&#xff0c;进入minio文件夹&#xff0c;并创建data目录&#xff1b; [rootxxkfz soft]# mkdir minio [rootxxkfz soft]# cd minio [rootxxkfz minio]# mkdir data 执行如下命令进行下载 [rootxx…

Java内存划分详解:从基础到进阶

Java内存划分详解&#xff1a;从基础到进阶 1. 程序计数器&#xff08;Program Counter Register&#xff09;2. Java虚拟机栈&#xff08;Java Virtual Machine Stack&#xff09;3. 堆&#xff08;Heap&#xff09;4. 方法区&#xff08;Method Area&#xff09;5. 运行时常量…

[计网初识1] TCP/UDP

学习内容 1.TCP建立链接的3次握手&#xff0c;断开连接的4次挥手 2.TCP报文段组成 内容 1.TCP 建立连接的3次握手? 假设主动方是客户端&#xff0c;被动方是服务端。 第一次 客户端给服务端发送 “hello,我是客户端” (TCP段中 SYN1) 第二次 服务端给客户端发送"我接…

从零开始的python学习生活2

接上封装 class Phone:__volt0.5def __keepsinglecore(self):print("让cpu以单核运行")def if5G(self):if self.__volt>1:print("5G通话已开启")else:self.__keepsinglecore()print("电量不足&#xff0c;无法使用5G通话&#xff0c;已经设置为单…

Django项目创建的准备工作【 2 】

【 一 】调整后端目录 #1 目录结构 """ ├── luffy_api├── logs/ # 项目运行时/开发时日志目录 - 包├── manage.py # 脚本文件├── luffy_api/ # 项目主应用&#xff0c;开发时的代码保存 - 包├── apps/ …

【Git基本操作】添加文件 | 修改文件 | 及其各场景下.git目录树的变化

目录 1. 添加文件&add操作和commit操作 2. .git树状目录的变化 3. git其他操作 4. 修改文件 4.1 git status 4.2 git diff 1. 添加文件&add操作和commit操作 add操作&#xff1a;将工作区中所有文件的修改内容 添加进版本库的暂存区中。commit操作&#xff1a;…

系统服务综合实验(dns服务,nfs服务)

题目&#xff1a;现有主机 node01 和 node02&#xff0c;完成如下需求&#xff1a; 1、在 node01 主机上提供 DNS 和 WEB 服务 2、dns 服务提供本实验所有主机名解析 3、web服务提供 www.rhce.com 虚拟主机 4…

three-tile: 1. 第一个three-tile程序

上篇介绍了&#xff1a;three-tile&#xff1a; 一个开源的轻量级三维瓦片库-CSDN博客 three-tile 是一个开源的轻量级三维瓦片库&#xff0c;它基于threejs使用typescript开发&#xff0c;提供一个三维地形模型&#xff0c;能轻松给你的应用增加三维瓦片地图。 项目地址&…

C#知识|账号管理系统:UI层-添加账号窗体设计思路及流程。

哈喽,你好啊,我是雷工! 前边练习过详情页窗体的设计思路及流程: 《C#知识|上位机UI设计-详情窗体设计思路及流程(实例)》 本节练习添加账号窗体的UI设计,以下为学习笔记。 01 效果展示 02 添加窗体 在UI层添加Windows窗体,设置名称为:FrmAddAcount.cs 设置窗体属…