【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();
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java虚拟机与跨平台特性

Java虚拟机与跨平台特性 1、Java虚拟机&#xff08;JVM&#xff09;2、跨平台特性3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、Java虚拟机&#xff08;JVM&#xff09; Java虚拟机是一个能够执行Java字节码的软件环境。它模…

计算机的错误计算(二十七)

摘要 介绍错数&#xff1a;任给一个单变元函数&#xff0c;当自变量被截断时&#xff0c;函数值中含有的错误的有效数字个数&#xff0c;并给出其计算方法。 首先&#xff0c;从字面上看&#xff0c;错数表示错误的有效数字个数。 下面从一个略显粗糙的化简过程&#xff0c;推…

LLM-文本分块(langchain)与向量化(阿里云DashVector)存储,嵌入LLM实践

文章目录 前言向量、令牌、嵌入分块按字符拆分按字符递归拆分按token拆分 向量化使用 TextEmbedding 实现语义搜索数据准备通过 DashScope 生成 Embedding 向量通过 DashVector 构建检索&#xff1a;向量入库语义检索&#xff1a;向量查询完整代码 总结 前言 Transformer 架构…

GitLab和Git

GitLab保姆级教程 文章目录 GitLab保姆级教程一、GitLab安装二、添加组和用户三、新增项目四、Git上传项目说明五、命令行指引 根据以下说明从计算机中上传现有文件&#xff1a;六、创建与合并分支七、GitLab回滚到特定版本八、数据备份与恢复九、docker中创建gitlab GIT 常用命…

Flask 用 Redis 缓存键值对-实例

Flask 使用起 Redis 来简直就是手到擒来&#xff0c;比 MySQL 简单多了&#xff0c;不需要那么多配置&#xff0c;实际代码就这么多&#xff0c;直接复制就能用。除了提供简单实用的实例以外&#xff0c;本文后面还会简单介绍一下 Redis 的安装与使用&#xff0c;初学者也能一看…

自建搜索引擎-基于美丽云

Meilisearch 是一个搜索引擎&#xff0c;主程序完全开源&#xff0c;除了使用官方提供的美丽云服务&#xff08;收费&#xff09;进行对接之外&#xff0c;还可以通过自建搜索引擎来实现完全独立的搜索服务。 由于成本问题&#xff0c;本博客采用自建的方式&#xff0c;本文就…

如何在 Windows 10 上恢复未保存的 Word 文档

您是否整晚都在处理一个重要的 word 文件&#xff0c;但忘记保存它了&#xff1f;本文适合您。在这里&#xff0c;我们将解释如何恢复未保存的 word 文档。除此之外&#xff0c;您还将学习如何恢复已删除的 word 文档。 从专业人士到高中生&#xff0c;每个人都了解丢失重要 W…

物流数据分析成本利润计算软件,佳易王物流货运单管理系统操作教程

前言&#xff1a; 物流数据分析成本利润计算软件&#xff0c;佳易王物流货运单管理系统操作教程 以下软件操作教程以&#xff0c;佳易王物流单统计分析软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 一、软件操作教程 1、佳易王物流货运…

前端八股文 闭包的理解

什么是闭包 闭包是指有权访问另一个函数作用域中的变量的函数 ——《JavaScript高级程序设计》 &#xff08;闭包 内层函数 引用的外层函数的变量&#xff09; 下面就是一个简单的闭包 闭包不一定必须有 return 闭包不一定有内存泄漏 闭包 什么时候用到 return 就是 外部…

【区块链+跨境服务】粤澳健康码跨境互认系统 | FISCO BCOS应用案例

2020 年突如其来的新冠肺炎疫情&#xff0c;让社会治理体系面临前所未见的考验&#xff0c;如何兼顾疫情防控与复工复产成为社会 各界共同努力的目标。区块链技术作为传递信任的新一代信息基础设施&#xff0c;善于在多方协同的场景中发挥所长&#xff0c;从 而为粤澳两地的疫情…

QT TCP网络通信编程

学习目标&#xff1a; TCP网络通信编程 前置环境 运行环境:qt creator 4.12 学习内容 一、TCP 协议基础知识: TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 拥塞控制算法包括慢启动、拥塞避免、快速重传和快速恢复。TCP 通信需要建立连接,Qt 提供 QTcp…

【区块链 + 智慧政务】省级一体化区块链平台 | FISCO BCOS应用案例

在加强数字政府建设的大背景下&#xff0c;科大讯飞广泛应用数字技术于政府管理服务&#xff0c;推动政府数字化、智能化运行。同时&#xff0c; 统筹推进业务、数据和技术的融合&#xff0c;提升跨地域、跨层级、跨部门和跨业务的协同管理和服务水平。 当前政务信息化建设中&…

绿盟培训入侵排查

一、webshell 排查 1、文件特征 2、windows 3、linux 4、内存马 二、web 日志排查 1、日志排查 2、中间件报错排查 三、服务器失陷处置

洛谷 7.10 数数

Vanya and Books - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) ac代码 #include<bits/stdc.h> typedef long long ll;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) const ll N1e3; using namespace std;int main() {IOS;ll x;cin>>x;ll ans0,px…

VScode 格式化插件Prettier设置无效

VScode在配置格式化代码的插件的时候&#xff0c;可以选择Prettier或者ESlint等插件 比如选择Prettier格式化代码 在某文件修改代码之后&#xff0c;ctrls 保存代码&#xff0c;保存之后会自动格式化代码&#xff0c;但是我们发现控制台有报错 为什么已经设置了格式化插件为Pr…

Springboot 设置个性化banner

在 Spring Boot 中自定义 banner 的方法有几种&#xff0c;可以通过以下步骤来实现&#xff1a; 1、使用文本文件作为 banner 在 src/main/resources 目录下创建一个名为 banner.txt 的文件。 编辑这个文件&#xff0c;输入想要显示的文本。确保文本中包含换行符和空格…

linux radix-tree 基数树实现详解

radix tree&#xff0c;又称做基数树&#xff0c;是一种适合于构建key(index)与value(item)相关联的数据结构。内核中使用非常广泛。本文主要聚焦linux内核基数树的代码实现,大量注释过的代码。 radix-tree组织结构如下: 1、数据结构 /** The bottom two bits of the slot de…

Java中的公平锁和非公平锁

1、什么是公平锁和非公平锁 公平锁和非公平锁是指在多线程环境下&#xff0c;如何对锁进行获取的顺序和策略的不同。 公平锁是指多个线程按照申请锁的顺序来获取锁&#xff0c;即先到先得的策略。当一个线程释放锁之后&#xff0c;等待时间最长的线程将获得锁。公平锁的优点是保…

MySQL六:内置函数

文章目录 1. 日期函数2. 字符串函数3. 数学函数4. 其它函数 1. 日期函数 2. 字符串函数 函数名描述charset(str)返回字符串字符集concat(string2 [,…])连接字符串instr(string&#xff0c;substring)返回substring在string中出现的位置&#xff0c;没有返回0ucase(string2)转…

甘肃美食于兰洽会数智电商馆展现魅力

在近日盛大开幕的兰洽会上&#xff0c;数智电商馆成为了备受瞩目的焦点&#xff0c;而甘肃平凉的特产更是在其中大放异彩。 平凉&#xff0c;这座拥有深厚历史文化底蕴的城市&#xff0c;带着其独具特色的物产走进了兰洽会的舞台。走进数智电商馆&#xff0c;首先映入眼帘的便是…