【Java】逻辑控制 —— 三大结构 和 猜数字游戏

目录

1. 顺序结构

2. 分支结构【与C略有不同】

2.1 if语句

2.2 switch语句

注意事项【与C不同】

3. 循环结构【与C略有不同】

3.1 while循环

* break和continue

3.2 for循环

3.3 do while循环

* 输入的判断(hasNext)

4. 猜数字游戏


1. 顺序结构

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

System.out.println("aaa");
 System.out.println("bbb");
 System.out.println("ccc");
 
// 运行结果
aaa
bbb
ccc

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

System.out.println("aaa");
 System.out.println("ccc");
 System.out.println("bbb");
 
// 运行结果
aaa
ccc
bbb

2. 分支结构【与C略有不同】

2.1 if语句

语法格式1:

if(布尔表达式){

   // 语句

}

注意:if中的表达式一定是布尔表达式。例如C语言中的“ if ( a )”,在Java语言中必须写成“ if (a!=0)”.

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

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

 int score = 92;
 if(score >= 90){
    System.out.println("吃个大鸡腿!!!");
 }

语法格式2:

if(布尔表达式){  

         // 语句1

} else {  

         // 语句2

}

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

比如:小明,如果这次考到90分以上,给你奖励一个大鸡腿,否则奖你一个大嘴巴子。

int score = 92;
 if(score >= 90){
    System.out.println("吃个大鸡腿!!!");
 }else{
    System.out.println("挨大嘴巴子!!!");
 }

语法格式3:

 if(布尔表达式1){
    // 语句1
 } else if (布尔表达式2){
    // 语句2
 } else {
    // 语句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.2 switch语句

基本语法:

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

执行流程:

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

case 和 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;
 }

一些建议和规则:

  • 多个case后的常量值不可以重复
  • break 不要遗漏, 否则会失去 "多分支选择" 的效果
  • switch 不能表达复杂的条件(不能用switch语句判断区间
  • switch 虽然支持嵌套, 但是很丑,一般不推荐~


注意事项【与C不同】

switch的括号内只能是以下类型的表达式:

  • 基本类型:byte、char、short、int。【注意不能是long类型和boolean类型】
  • 引用类型:String常量串、枚举类型。

使用long类型或boolean类型会报错:

可以使用字符串类型:

public static void main(String[] args) {
        String a = "hello";
        switch(a){
            case "true":
                System.out.println("true");
                break;
            case "false":
                System.out.println("false");
                break;
            default:
                System.out.println(a);
        }
    }

输出:

3. 循环结构【与C略有不同】

3.1 while循环

语法格式:

 while(循环条件){
    循环语句;
}

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

注意:while中的循环条件也必须是布尔表达式,这点与C语言不一样。

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

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

* break和continue

 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 就会让循环结束.

 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.2 for循环

基本语法:

for(表达式①;布尔表达式②;表达式③){
    表达式④;
 }

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

执行过程:

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

例子,计算 1 - 100 的和:

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

3.3 do while循环

语法格式:

do{
    循环语句;
 }while(循环条件);

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

【注意事项】

  1. do while 循环最后的分号不要忘记 
  2. 一般 do while 很少用到, 更推荐使用 for 和 while.

* 输入的判断(hasNext)

当我们以循环读入的结束判断作为while的循环条件的话,我们需要用到hasnext。

例如:使用 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).

这里对输入数据的判断方法是Random.nextInt(),如果输入的不是整数,或者输入的是ctrl+z,循环就会停止。

还有其他常用类型的循环输入判断方法:

4. 猜数字游戏

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

参考代码

import java.util.Random;
import java.util.Scanner;

public static void main1(String[] args) {
        Scanner sc = new Scanner(System.in);//扫描仪
        Random rd = new Random();   //随机数生成器 //不输入参数,种子是时间戳

        int num = rd.nextInt(100);  //返回区间[0,100)的数字
        System.out.println("请输出数字:(0-100)");
        while(true){
            int n = sc.nextInt();

            if(n > num){
                System.out.println("猜大了,请继续:");
            }else if(n < num){
                System.out.println("猜小了,请继续:");
            }else{
                System.out.println("恭喜你,猜对了!");
                break;
            }

        }
        sc.close();
    }

几点解析:

  • Random类是一个随机数生成器,使用时会自动导入包 java.util.Random
  • 当调用构造方法Random( )时,如果不输入参数,则随机数种子是当前时间的时间戳;如果自己输入一个固定值,则每次产生的随机数都相同。【相当于C语言中 srand()函数 time()函数 的结合】
  • Randon.nexInt()方法会返回一个随机整数值。如果不输入参数,这个值的范围就是int类型的范围,即0~2^31-1。如果输入参数,则该值的范围就是[0, 参数值)注意左边是闭区间,右边是开区间)。【相当于C语言中 rand()函数】

本期分享完毕,感谢大家的支持Thanks♪(・ω・)ノ

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

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

相关文章

大文件秒传,分片上传,断点续传

大文件分片上传 一 功能描述 1.文件通过web端分片多线程上传到服务端&#xff0c;然后web端发起分片合并&#xff0c;完成大文件分片上传功能 2.上传过的大文件&#xff0c;实现秒传 3.上传过程中&#xff0c;服务异常退出&#xff0c;实现断点续传 二 流程图 三 代码运行…

【含开题报告+文档+PPT+源码】基于Java的社会公益平台

开题报告 随着社会的不断进步和人们公益意识的日益增强&#xff0c;社会公益事业在全球范围内得到了广泛的关注和参与。然而&#xff0c;传统的公益模式往往受到信息不对称、资源分散、管理效率低下等问题的困扰&#xff0c;导致公益活动的效果有限&#xff0c;难以满足社会的…

【C语言】C语言入门--函数

文章目录 前言一、函数的概念一、pandas是什么&#xff1f;二、库函数 1.标准库和头文件2.库函数的使用方法3.库函数文档的一般格式三、自定义函数四、形参和实参五、return语句六、数组做函数参数七、嵌套调用和链式访问 1.嵌套调用2.链式访问八、函数的声明和定义 1.单个文件…

C++在实际项目中的应用第二节:C++与区块链

第五章&#xff1a;C在实际项目中的应用 第二课&#xff1a;C与区块链 区块链技术因其去中心化、不可篡改和透明性而受到广泛关注。在这门课程中&#xff0c;我们将深入探讨区块链的基本原理、智能合约的开发以及实际应用的案例分析&#xff0c;重点使用 C 作为实现语言&…

微服务之网关、网关路由、网关登录校验

简介&#xff1a;来源&#xff1a;SpringCloud微服务开发与实战&#xff0c;java黑马商城项目微服务实战开发&#xff08;涵盖MybatisPlus、Docker、MQ、ES、Redis高级等&#xff09; 认识网关 前端请求不能直接访问微服务&#xff0c;而是要请求网关&#xff1a; 网关可以做…

服务环境的搭建

一、基础环境搭建 1、python3 准备相关的jar包 Index of /ftp/python/3.7.9/ scp Python-3.7.9.tgz root192.168.1.245:/opt/dockerinstall/python3/ yum -y install gcc yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel…

【语音转文本新体验】Windows部署Whisper Web结合内网穿透轻松远程转录——“cpolar内网穿透”

文章目录 前言1.本地部署Whisper Web1.1 安装git1.2 安装Node.js1.3 运行项目 2. Whisper Web使用介绍3. 安装Cpolar内网穿透4. 配置公网地址5. 公网访问测试6. 配置固定公网地址 前言 OpenAI开源的 Whisper 语音转文本模型效果都说还不错&#xff0c;今天就给大家推荐 GitHub…

[A-14]ARMv8/ARMv9-Memory-内存模型的类型(Device Normal)

ver0.1 [看前序文章有惊喜。] 前言 前面花了很大的精力把ARM构建的VMSA中的几个核心的议题给大家做了介绍,相信大家已经能够理解并掌握ARM的内存子系统的工作原理大致框架。接下来我们会规划一些文章,对ARM内存子系统的一些细节做一下介绍,使ARM的内存子系统更加的丰满。本…

JetBrains IDE中GPU进程(JCEF)重启问题(Too many restarts of GPU-process)解决方案

目录 前言1. GPU进程重启问题概述1.1 什么是GPU进程重启问题&#xff1f;1.2 该问题带来的影响 2. GPU进程重启问题的原因分析2.1 显卡驱动的兼容性问题2.2 系统资源的限制2.3 JCEF组件的设置不合理 3. 解决方案3.1 方法一&#xff1a;通过自定义属性禁用GPU加速3.2 方法二&…

NVR批量管理软件/平台EasyNVR多个NVR同时管理支持UDP和TCP传输协议

随着科技的飞速发展&#xff0c;视频技术已成为现代社会不可或缺的一部分&#xff0c;广泛应用于安防监控、娱乐传播、在线教育、电商直播等多个领域。在这一背景下&#xff0c;NVR管理平台EasyNVR作为一款高效、灵活的视频监控管理系统&#xff0c;正经历着前所未有的发展机遇…

医学影像基础:常见的医学影像学术语和概念

目录 1. 基本影像术语 2. X射线相关术语 3. CT相关术语 4. MRI相关术语 5. 超声相关术语 6. 核医学相关术语 7. 影像质量和技术术语 8. 临床影像术语 总结 在医学影像学中&#xff0c;有许多术语和概念是常用且重要的。了解这些术语和概念有助于更好地理解影像报告、与…

稀土抗紫外屏蔽剂在化妆品上的应用

稀土抗紫外屏蔽剂的作用原理 稀土元素具有独特的电子结构&#xff0c;能够吸收和散射紫外线。其作用主要有以下几个方面&#xff1a; 1. 吸收紫外线&#xff1a;稀土元素可以吸收特定波长的紫外线&#xff0c;将其能量转化为热能或其他形式的能量&#xff0c;从而减少紫外线对…

2024 前端面试题!!! html css js相关

常见的块元素、行内元素以及行内块元素&#xff0c;三者有何不同&#xff1f;​​​​​​​ HTML、XML、XHTML它们之间有什么区别&#xff1f;​​​​​​​ DOCTYPE(⽂档类型) 的作⽤ Doctype是HTML5的文档声明&#xff0c;通过它可以告诉浏览器&#xff0c;使用哪一个HTM…

Android Studio安装完成后,下载gradle-7.4-bin.zip出现连接超时

文章目录 问题原因&#xff1a;因为下载镜像是谷歌&#xff0c;属于外网&#xff0c;不好正常连接&#xff0c;下载依赖。解决方法&#xff1a;找到gradle-wrapper.properties文件&#xff0c;修改镜像&#xff0c;如下图&#xff0c;然后再单击try again重新下载。 问题原因&a…

IntelliJ IDEA 2024社区版保姆及图文安装教程

1.下载 这里我们安装的是2024.2.3版本IntelliJ IDEA Community Edition 下载地址:https://www.jetbrains.com/idea/download/other.html 如果下载不便可以使用本文的网盘资源下载 2.安装 打开软件点击下一步 在安装过程中&#xff0c;我们可以选择安装的目录&#xff0c;也…

【二叉树进阶题目2】(算法题详细简介)

【二叉树进阶题目2】&#xff08;算法题详细简介&#xff09; 前言5. 二叉树的层序遍历 ||&#xff08;力扣107&#xff09;5.1 题目链接5.2 示例分析5.3 代码实现 6. 二叉树的层序遍历&#xff08;力扣102)6.1 题目链接6.2 代码实现 7. 根据二叉树创建字符串&#xff08;力扣6…

基于Pyecharts的数据可视化开发(二)调用通义千问api分析爬虫数据

上一篇博客做了关于“广州市2023年天气情况”的数据爬取&#xff0c;并保存为.csv文件。下一步是想用生成的.csv文件&#xff0c;直接调用大模型api进行分析&#xff0c;得出结论。通过调研&#xff0c;阿里云的通义千问大模型qwen-long可以实现对文件数据的分析。 通义千问大模…

SD-WAN:低延迟的国际网络连接方案

在全球化的商业环境中&#xff0c;企业业务正不断扩展至全球市场&#xff0c;急需实现高效、稳定的跨国网络连接。然而&#xff0c;传统的国际组网方式往往会遇到高延迟、低带宽和管理复杂等难题&#xff0c;导致企业运营效率下降并影响用户体验。本文将介绍SD-WAN如何解决这些…

WebRTC VAD 详解与代码示例

WebRTC VAD 详解与代码示例 WebRTC VAD的工作原理WebRTC VAD的代码示例总结WebRTC VAD(Voice Activity Detection,语音活动检测)是一种用于检测音频流中是否存在语音活动的技术。在实时通信系统中,VAD技术能够显著减少带宽消耗并优化系统资源利用,特别是在WebRTC这类实时音…

在macOS的多任务处理环境中,如何平衡应用的性能与用户体验?这是否是一个复杂的优化问题?如何优化用户体验|多任务处理|用户体验|应用设计

目录 一 多任务处理与应用性能 1. macOS中的多任务处理机制 2. 性能优化的基本策略 二 用户体验的关键要素 1. 响应速度 2. 界面友好性 3. 功能的直观性 三 平衡性能与用户体验的策略 1. 资源管理 2. 优化数据加载 3. 使用合适的线程模型 4. 实时监测和调整 四 使…