【详识JAVA语言】逻辑控制

news2024/11/18 23:47:32

概述

我的曾经

早上8:00起床--->洗漱--->吃早饭--->上课--->吃午饭--->上课--->运动--->吃完饭--->玩手机--->睡觉

每天的生活貌似都是这么规律,顺序的做着每件事,前途一片渺茫~~~

直到有一天: 我幡然醒悟,不好好学习可能要卖红薯,奋发图强可能离梦想会更近,于是我选择学习Java,从此:

早上6:00起床--->看书敲代码--->上课+看编程书籍--->吃午饭--->刷题--->上课+看书--->吃晚饭--->总结--->看科技新闻--->睡觉

就这样日复一日的努力着,感觉每天都很充实,生活看到了希望~~~ 再后来: 秋招来了,我用自己所学,一次次刷新着手中offer的记录,那一刻,我被自己感动了 ~~~

其实程序和人生是一样:顺序中夹杂着循环,伴随一次次选择不断成长

顺序结构 

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

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

分支结构 

if 语句

语法格式1

if(布尔表达式){ // 语句 }

如果布尔表达式结果为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("错误数据");

}

switch 语句

基本语法

switch(表达式){

case 常量值1:{

语句1;

[break;]

}

case 常量值2:{

语句2;

[break;]

}

...

default:{

内容都不满足时执行语句;

[break;]

}

}

执行流程:

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后的常量值不可以重复 switch的括号内只能是以下类型的表达式:

基本类型:byte、char、short、int,注意不能是long类型

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

double num = 1.0; switch(num) {

case 1.0:

System.out.println("hehe");

break;

case 2.0:

System.out.println("haha");

break;

}

// 编译出错 Test.java:4: 错误: 不兼容的类型: 从double转换到int可能会有损失 switch(num) { ^ 1 个错误

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

int day = 1;

switch(day) {

case 1:

System.out.println("星期一");

// break;

case 2:

System.out.println("星期二");

break;

}

// 运行结果 星期一 星期二

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

// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe

// 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示.

if (num > 10 && num < 20) {

System.out.println("hehe");

}

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

int x = 1;

int y = 1;

switch(x) {

case 1:

switch(y) {

case 1:

System.out.println("hehe");

break;

} break;

case 2:

System.out.println("haha");

break;

}

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

循环结构

while 循环

基本语法格式:

while(循环条件){

循环语句;

}

循环条件为 true, 则执行循环语句;

否则结束循环.

代码示例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);

这里我们发现, 当一个代码中带有多重循环的时候, 代码的复杂程度就大大提高了. 而比较复杂的代码就更容易出错.

后面我们会采用更简单的办法来解决这个问题.

注意事项

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

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

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

int num = 1;

while (num <= 10); {

System.out.println(num);

num++;

}

// 执行结果 [无任何输出, 程序死循环]

此时 ; 为 while 的语句体(这是一个空语句), 实际的 { } 部分和循环无关. 此时循环条件

死循环了.

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 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句.

for 循环

基本语法

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

表达式④;

}

表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次

表达式2: 循环条件,满则循环继续,否则循环结束

表达式3: 循环变量更新方式

执行过程 

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

代码示例 

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);

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

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

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

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

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

do while 循环

基本语法

do{

循环语句;

}while(循环条件);

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

例如:打印 1 - 10

int num = 1;

do {

System.out.println(num);

num++;

} while (num <= 10);

注意事项

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

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

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

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

相关文章

[Java 探索者之路] 一个大厂都在用的分布式任务调度平台

分布式任务调度平台是一种能够在分布式计算环境中调度和管理任务的系统&#xff0c;在此环境下&#xff0c;各个任务可以在独立的节点上运行。它有助于提升资源利用率&#xff0c;增强系统扩展性以及提高系统对错误的容忍度。 文章目录 1. 分布式任务调度平台1. 基本概念1.1 任…

snakeyaml1.x升级2.x导致项目启动报错

snakeyaml1.x升级2.x,修复漏洞 1.背景 在工作中&#xff0c;经常会有漏洞扫描&#xff0c;有一次看到了snakeyaml的漏洞&#xff1a; 项目框架&#xff1a;springBoot 版本&#xff1a;2.2.6.RELEASE snakeyaml 中央仓库信息 snakeyaml中央仓库地址&#xff1a;https://m…

基于 Amazon EKS 的 Stable Diffusion ComfyUI 部署方案

01 背景介绍 Stable Diffusion 作为当下最流行的开源 AI 图像生成模型在游戏行业有着广泛的应用实践&#xff0c;无论是 ToC 面向玩家的游戏社区场景&#xff0c;还是 ToB 面向游戏工作室的美术制作场景&#xff0c;都可以发挥很大的价值&#xff0c;如何更好地使用 Stable Dif…

程序项目打包发布方法,采用InstallShield软件

重点&#xff1a; 1.程序项目做出来了&#xff0c;需要打包发布给用户。如何打包是关键。 2.采用InstallShield软件进行发布。 步骤一&#xff1a;创建一个依赖三方库配置环境的bat文件的项目。 &#xff08;主要测试三方库打包 和如果有bat文件&#xff0c;需要先创建环境&…

YOLOv9独家原创改进|使用DySample超级轻量的动态上采样算子

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、DySample论文摘要 尽管最近的基于内核的动态上采样器如CARAFE、FADE和SAPA取得了令人印象深刻的性能提升&#xff0c;但它们引入了大量的工作量&…

Canvas笔记03:Canvas元素功能、属性、获取、原理等一文讲透

hello&#xff0c;我是贝格前端工场&#xff0c;最近在学习canvas&#xff0c;分享一些canvas的一些知识点笔记&#xff0c;本期分享canvas元素的知识&#xff0c;欢迎老铁们一同学习&#xff0c;欢迎关注&#xff0c;如有前端项目可以私信贝格。 Canvas元素是HTML5中的一个重…

加密隧道技术

在现在的互联网上传输数据&#xff0c;首要考虑的就是安全。这关乎到你的隐私&#xff0c;个人信息&#xff0c;财产安全等等重大问题。如果你的程序本身传输的信息没有加密&#xff0c;也可以通过其他辅助方式让你的通信加密。一些工具的就是为了解决这样的场景的&#xff0c;…

【二分】第k个缺失的数

第K个缺失的数 链接 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/kth-missing-positive-number/ 题目 题解 二段…

【GPU驱动开发】-mesa简介

前言 不必害怕未知&#xff0c;无需恐惧犯错&#xff0c;做一个Creator&#xff01; 一、mesa介绍 Mesa 是一个开源的3D图形库&#xff0c;它实现了多种图形API&#xff0c;包括 OpenGL、Vulkan 和 OpenCL。Mesa 的目标是提供一个开源、跨平台的图形库&#xff0c;使得开发者…

Qt/自定义控件的封装

新建文件&#xff0c;选择Qt设计师界面类 创建空界面 这是自己控件封装的文件&#xff0c;双击跳转到设计界面进行设计 跳转到其他的ui界面&#xff0c;创建一个widget 右键&#xff0c;选择提升为 在提升的类名称输入刚刚创建的类名&#xff0c;添加后选择提升&#xff0c;勾选…

WINDOWS内存管理 - 返回状态值

DDK大部分函数的返回值类型是NTSTATUS类型。查看DDK.h文件&#xff0c;可以看到 typedef LONG NTSTATUS; NTSTATUS的定义和LONG等价。为了函数的形式统一&#xff0c;所有函数的返回值都是NTSTATUS类型。NTSTATUS就是一个32位的整数&#xff0c;其每位有着不同的含义&#xf…

FCIS 2023网络安全创新大会:洞察前沿技术,探索安全新境界(附大会核心PPT下载)

随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;成为全球关注的焦点。作为网络安全领域的重要盛会&#xff0c;FCIS 2023网络安全创新大会如期而至&#xff0c;汇聚了全球网络安全领域的顶尖专家、学者、企业家和政策制定者&#xff0c;共同探讨网络安全的…

并查集学习: leetcode 2368. 受限条件下可到达节点的数目

现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - 1 条边。 给你一个二维整数数组 edges &#xff0c;长度为 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数数组 restricted 表示…

LeetCode_Java_动态规划系列(2)(题目+思路+代码)

131.分割回文串 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1&#xff1a; 输入&#xff1a;s "aab" 输出&#xff1a;[["a&qu…

Redis的高性能之道

前言&#xff1a;做码农这么多年&#xff0c;我也读过很多开源软件或者框架的源码&#xff0c;在我看来&#xff0c;Redis是我看过写得最优美、最像一件艺术品的软件&#xff0c;正如Redis之父自己说的那样&#xff0c;他宁愿以一个糟糕的艺术家身份而不是一名好程序员被别人记…

【双指针】删除有序数组中重复元素,双指针原地修改数组

删除有序数组中重复元素 链接 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-duplicates-from-sorted-array/…

Programming Abstractions in C阅读笔记:p308-p311

《Programming Abstractions in C》学习第76天&#xff0c;p308-p311总结&#xff0c;总计4页。 一、技术总结 1.快速排序伪代码 #include <stdbool.h>static int Partition(int array[], int n);/** Implementation notes: SortIntegerArray* ----------------------…

实践航拍小目标检测,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建无人机航拍场景下的小目标检测识别分析系统

关于无人机相关的场景在我们之前的博文也有一些比较早期的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《deepLabV3Plus实现无人机航拍目标分割识别系统》 《基于目标检测的无人机航拍场景下小目标检测实践》 《助力环保河道水质监测&#xff0c;基于yolov…

Django后端开发——中间件

文章目录 参考资料中间件注册中间件settings.pymiddleware/mymiddleware.pymysite3/views.pymysite3/urls.py 练习 参考资料 B站网课&#xff1a;点击蓝色字体跳转 或复制链接至浏览器&#xff1a;https://www.bilibili.com/video/BV1vK4y1o7jH?p39&vd_source597e21cf34f…

嵌入式Linux中GPIO设置的一些基本指令和步骤

一、GPIO的介绍 嵌入式Linux中的GPIO&#xff08;General Purpose Input/Output&#xff0c;通用输入/输出&#xff09;是一种常用的接口&#xff0c;允许开发者直接控制硬件设备的某些引脚&#xff0c;进行诸如LED控制、传感器读取、设备状态监测等任务。 二、设置步骤和示例…