Java基础教程 - 4 流程控制

更好的阅读体验:点这里 ( www.doubibiji.com
更好的阅读体验:点这里 ( www.doubibiji.com
更好的阅读体验:点这里 ( www.doubibiji.com

4 流程控制

4.1 分支结构

判断在生活中无处不在,例如我们登录某个系统,需要判断密码是否正确,正确才能登录,否则登录失败。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1 if-else 语句

在 Java 中通过 if else 来进行条件的判断,格式如下:

if (condition) {// condition为true时执行的代码块
} else {// condition为false时执行的代码块
}

也可以不需要 else

if (condition) {// 条件成立,要做的事情
}

if 后面的条件 condition 需要 boolean 类型的值、变量或表达式,也就是 truefalse

举个栗子,判断一个数是否为偶数:

public static void main(String[] args) {int num = 5;if (num % 2 == 0) {System.out.println(num + " 是偶数");} else {System.out.println(num + " 是奇数");}
}

执行结果:

5 是奇数


一般情况下,我们经常通过 关系运算逻辑运算 作为 if 的判断条件。

举个栗子:

public static void main(String[] args) {int a = 5;if (a > 0 && a < 10)System.out.println("a在0~10之间");
}

如果 ifelse 后面只有一条语句,可以省略 {}

2 if-elseif-else 语句

if-else 只能进行是和否的判断。

if-elseif-else 可以进行多条件判断。

语法格式:

if (condition1) {// condition1为true时执行的语句块
} else if (condition2) {// condition2为true时执行的语句块
} else {// 所有条件都为false时执行的语句块
}

else-if 可以有多个,最后的 else 可以省略。

当满足一个条件后,其他的条件就不会再判断了,如果所有条件都不满足,会执行 else


下面通过练习来举个栗子:

给出成绩,经过判断,打印出输入的成绩是优秀、良好、中等、及格还是不及格。

public static void main(String[] args) {int score = 85;if (score < 0 || score > 100) {System.out.println("成绩不正确");} else if (score >= 90) {System.out.println("优秀");} else if (score >= 80) {System.out.println("良好");} else if (score >= 70) {System.out.println("中等");} else if (score >= 60) {System.out.println("及格");} else {System.out.println("不及格");}
}

上面的输出结果为:良好


重新修改一下程序,读取键盘的输入作为值,这里用到读取键盘输入,需要用到 Scanner 类,所以需要使用 import 进行导入,import 的知识点,后面再讲解。

import java.util.Scanner;public class HelloJava {public static void main(String[] args) {// 声明一个Scanner,用于读取键盘的输入Scanner scan = new Scanner(System.in);// 读取的输入int score = scan.nextInt();if (score < 0 || score > 100) {System.out.println("成绩不正确");} else if (score >= 90) {System.out.println("优秀");} else if (score >= 80) {System.out.println("良好");} else if (score >= 70) {System.out.println("中等");} else if (score >= 60) {System.out.println("及格");} else {System.out.println("不及格");}}
}

nextInt() 表示以整形数据的形式读取键盘输入。当程序执行到 scan.nextInt(); 的时候,程序会阻塞在这里,等待用户的输入,输入完成,才会继续执行。


if-else语句都是可以相互嵌套的,可以在 if-else 判断中再进行 if-else 判断。

举个栗子:

public static void main(String[] args) {int x = 10;int y = 20;if (x > 5) {if (y > 15) {System.out.println("x 大于 5,y 大于 15");} else {System.out.println("x 大于 5,y 小于等于 15");}} else {if (y > 10) {System.out.println("x 小于等于 5,y 大于 10");} else {System.out.println("x 小于等于 5,y 小于等于 10");}}
}

3 三目运算符

假设现在有两个数字,我们希望获得其中较大的一个,那么可以使用 if-else 语句,例如:

public static void main(String[] args) {int a = 4;int b = 5;int max;if (a > b)max = a;elsemax = b;System.out.println("最大值为:" + max);		// 最大值为:5
}

我们可以使用三目运算符来完成上面的功能,代码会更简洁的写法:

public static void main(String[] args) {int a = 4;int b = 5;int max = a > b ? a : b;System.out.println("最大值为:" + max);		// 最大值为:5
}

int max = a > b ? a : b; 的意思是:先判断 a > b,如果成立,就返回 a,不成立就返回 b

代码简洁了确实很多。能用三目运算符的地方都可以使用 if-else 代替。

4 switch语句

switch语句也是一种判断语句,通常用于对多个可能的值进行比较。switch语句的语法如下:

switch (value) {case value1:// value == value1 时执行的代码块break;case value2:// value == value2 时执行的代码块break;default:// value 不等于上面所有的case 时执行的代码块
}

注意:switch(value) 中的value,只能是byte、short、char、int、枚举类型(后面再讲)、String类型这六种数据类型

以下是一个示例代码,通过数字判断季节:

public static void main(String[] args) {int day = 2;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;default:System.out.println("错误的季节");}
}

day 满足哪个 case,就会执行哪个 case 后面的代码。

执行结果:

夏季

注意,每个case后,都需要进行 breakreturn,否则会跳到下一个 case

举个栗子:

public static void main(String[] args) {int day = 2;switch (day) {case 1:System.out.println("春季");break;case 2:System.out.println("夏季");case 3:System.out.println("秋季");case 4:System.out.println("冬季");break;default:System.out.println("错误的季节");}
}

因为 case 2 没有 break,所以执行完成,会跳到 case 3 执行,执行完 case 3 没有 breakreturn,会继续跳到 case 4执行,执行完成,case 4break,则跳出。

执行结果:

夏季

秋季

冬季


如果对多个 case 的处理是一样的,就可以将 break 省略。

例如下面的代码中,day 为1,2,3,打印的都是秋季。

public static void main(String[] args) {int day = 2;switch (day) {case 1:case 2:case 3:System.out.println("秋季");case 4:System.out.println("冬季");break;default:System.out.println("错误的季节");}
}

4.2 循环语句

循环在日常生活中也很常见,例如我们要重复做某件事,就需要用到循环,循环不停的做某件事。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

举个栗子,每天向小红送一条玫瑰花,坚持送100天,这个应该怎么实现呢?

1 for 循环

for循环是一种常用的循环语句,可以指定循环变量的初始值、终止条件和步长。

for循环的语法如下:

// 对应下面的各个部分
for(①初始化部分; ②循环条件部分; ④迭代部分){③循环体部分;// 执行过程是①-②-③-④-②-③-④-②-③-④......②
// 执行①,然后执行②,判断②是否成立,如果成立,执行③,③执行完成,执行④,④执行完成,再次判断②是否成立,成立继续一轮循环,执行③,②不成立,退出循环。

举个栗子:

public static void main(String[] args) {for (int i = 1; i <= 5; i++) {System.out.println(i);}
}

先执行 int i = 1,定义一个变量 i ,然后执行 i <= 5 ,判断 i 是否小于等于5,如果为 true,则执行循环体中的代码 System.out.println(i); ,执行完循环体中的代码,执行 i++ ,然后再次执行 i <= 5 ,判断i 是否小于等于5,直到 i <= 5 不满足,则终止循环。

打印结果:

1

2

3

4

5

再举个例子:

for (int i = 1, j = 10; i <= 5 && j > 0 ; i++, j--) {System.out.println(i + j);
}

从上面可以看出,初始化可以定义多个变量,但是变量的类型要一样。


使用 for 循环也是可以定义死循环的。

什么是死循环,就是一直循环,不会终止的循环。

举个栗子:

下面的循环中,不执行步长的增长,i 始终为1,则 i <= 5 永远成立,所以循环不会终止。

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

还可以这样写:

int i = 0;
for (;;) {System.out.println(i++);
}

上面的 for 循环会一直执行,不停的打印 i 的值,i 的值会一直增长。

在实际的开发中,for 循环是用的最多的。

2 while 循环

可以使用 while进行循环操作。

while 循环的语法:

while (condition) {// condition为真时执行的代码块
}

代码执行到while,会判断是否满足条件,如果满足,就会进入while循环,执行满足条件要做的事情,执行完成,会重新判断while后面的条件,如果满足会继续循环,如果不满足就不在进入循环。


回到一开始的提问:每天向小红送一条玫瑰花,坚持送100天,这个应该怎么实现呢?

public static void main(String[] args) {int i = 1;while (i <= 100) {System.out.println("第" + i +"天,送你一朵玫瑰花");i += 1;}
}

首先我们定义了一个变量 i ,用来记录当前是第几天。

我们一开始定义了 i 为 1,执行到 while 循环时,先判断 i 是否小于等于100,如果小于等于100,则进入到循环,打印语句,然后执行 i += 1;i 加1,然后再执行while后面的条件判断,判断 i <= 100,这样一直循环执行,当 i = 101时,刚好已经执行了100次,且不再满足 i < =100,此时终止循环。

注意,一定要对 i 进行累加,如果 i 不进行累加,永远会满足 i <= 100,那么循环将永远不会结束,变成死循环。

执行结果:

第1天,送你一朵玫瑰花

第2天,送你一朵玫瑰花

……

第99天,送你一朵玫瑰花

第100天,送你一朵玫瑰花


我们在计数的时候,i 也可以从0开始,例如:

public static void main(String[] args) {int i = 0;while (i < 100) {System.out.println("第" + (i + 1) + "天,送你一朵玫瑰花");i += 1;}
}

判断的条件的设定是很灵活的,根据实际需求来就可以了,不是一成不变的。


练习:计算从1累加到100的和

public static void main(String[] args) {int sum = 0; 										// 定义一个变量,存储累加的和int i = 1; 											// 定义一个变量,标识累加到几了,从1开始累加while (i <= 100) {sum += i; 										// 将和累加i += 1; 											// 将i加1,继续累加}System.out.println("1~100的和为:" + sum); 		// 打印最终的结果
}

执行结果:

1~100的和为:5050

使用 while 循环的地方都可以使用 for 循环代替。

3 do-while 循环

do...while 循环与 while 循环的区别在于,do...while 循环先执行一次循环体中的代码,再检查条件是否为真。如果条件为真,则继续执行循环体中的代码。

do...while 循环的语法如下:

do {// 循环体中的代码块
} while (condition);

举个栗子,再送一遍花:

public static void main(String[] args) {int i = 1;do {System.out.println("第" + i + "天,送你一朵玫瑰花");i += 1;} while (i <= 100);}

4 循环嵌套

循环是可以相互嵌套的,whilefor 循环中可以再次嵌套 whilefor 循环。

例如每天给小红送10多玫瑰花,坚持100天。

public static void main(String[] args) {int day = 1; // 记录第几天while (day <= 100) {			// 外层循环用于循环天数for (int roseCount = 1; roseCount <= 10; roseCount++) {			// 内层循环用于循环花的朵数System.out.println("第" + day + "天,第" + roseCount + "朵玫瑰花");}day += 1; // 天数+1}}

forwhiledo-while 循环都可以进行多层嵌套。

一般我们使用 for 循环是最多的,要简洁一些:

public static void main(String[] args) {for (int day = 1; day < 100; day++) {			// 外层循环用于循环天数for (int roseCount = 1; roseCount <= 10; roseCount++) {			// 内层循环用于循环花的朵数System.out.println("第" + day + "天,第" + roseCount + "朵玫瑰花");}}}

5 中断循环

我们在前面终止循环,主要是靠不满足条件时自动跳出。这样的话,必须每一次的循环都执行完成,到达条件判断的时候才能跳出。

但是有时候,我们不得不提前退出循环,或者终止当前的循环继续后面的循环,这个时候就需要 breakcontinue 关键字了。


break 语句

break 关键字用于直接结束当前所在的循环。


举个栗子:

如果一个循环,想在执行第三次的时候跳出:

public static void main(String[] args) {int i = 0;while (i < 10) {if (i == 3) {break;}System.out.println("i=" + i);i++;}
}

执行结果:

i=0
i=1
i=2

可以看到 i = 3 时,跳出了循环。

break只会跳出其所在的循环

public static void main(String[] args) {for (int i = 0; i < 10; i++) {for (int j = 0; i < 10; j++) {if (j == 3) {break;}System.out.println("i=" + i + ", j=" + j);}}
}

上面的代码,break只能跳出内部的那一个循环。无法跳出外部的循环。

如果就是想跳出外部的循环呢?

那就需要给外部的循环添加一个标签,举个栗子:

public static void main(String[] args) {outer : for (int i = 0; i < 10; i++) {for (int j = 0; i < 10; j++) {if (j == 3) {break outer;}System.out.println("i=" + i + ", j=" + j);}}
}

上面的代码中,给外层循环添加了一个 outer 标签,标签名称是自定义的;在循环内,可以通过 break 标签 来跳出指定的循环。

可以为每个循环添加标签,如果有多层循环,可以通过这样的方式跳出想要跳出的循环。while 循环也可以添加标签。


continue 语句

continue的作用是中断本次循环,直接进入下一次循环。


举个栗子:

循环5次,在第三次的时候跳过,继续后面的执行:

public static void main(String[] args) {for (int i = 0; i < 5; i++) {if (i == 3) {continue;}System.out.println("i=" + i);}
}

在上面 i == 3 的时候,终止了本次循环,直接跳到 i++ ,继续后面的执行。

执行结果:

i=0
i=1
i=2
i=4

同样,continue 和 break 一样,也可以选择终止的是哪一层的循环。

举个栗子:

public static void main(String[] args) {outer : for (int i = 0; i < 10; i++) {for (int j = 0; i < 10; j++) {if (j == 3) {continue outer;}System.out.println("i=" + i + ", j=" + j);}}
}

在上面的代码中,给外层循环定义了一个标签,每次执行到 j == 3 ,就会终止本次循环,直接跳转到外层循环的 i++,继续后面的循环。

4.3 练习

随机生成一个1-100的整数,然后在键盘输入数字来猜,猜不对,提示大了还是小了,猜对了,跳出循环。

在这里我们需要生成一个随机数,需要导入一个包 java.util.Random,用来生成 1~100 的随机数;

需要键盘输入,需要导入java.util.Scanner 包。

// 导入包
import java.util.Random;
import java.util.Scanner;public class HelloJava {public static void main(String[] args) {Random random = new Random();// 随机生成1-100的目标数// random.nextInt(100)表示生成0-100的随机数,包括0,不包括100// 在[0,100)的基础上+1就是[1,101),1~100var goal = random.nextInt(100) + 1;while (true) {System.out.println("请猜随机数的大小:");	// 打印信息,提示用户输入Scanner scan = new Scanner(System.in);int value = scan.nextInt();		// 获取键盘输入的数值if (value < 1 || value > 100) {System.out.println("请输入1-100之间的整数!");continue;}if (value == goal) {System.out.println("猜对了!");break;		// 如果猜对了,就跳出循环} else if (value < goal) {System.out.println("猜小了!");} else {System.out.println("猜大了!");}}}
}

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

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

相关文章

16、ESP32 Web

Web 服务器具有移动响应能力&#xff0c;可以使用本地网络上的任何设备作为浏览器进行访问。 示例功能&#xff1a; 构建 Web 服务器控制连接到 ESP32 的 LED在本地网络的浏览器上输入 ESP32 IP 地址访问 Web 服务器通过单击 Web 服务器上的按钮&#xff0c;更改 LED 状态 //…

VS Code中PlatformIO IDE的安装并开发Arduino

VS Code中PlatformIO IDE的安装并开发Arduino VS Code的安装 略 PlatformIO IDE的安装 PlatformIO IDE是是什么 PlatformIO IDE 是一个基于开源的跨平台集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于嵌入式系统和物联网&#xff08;IoT&#xff09;开发。…

CANdela/Diva系列1--CANdela Studio的基本介绍

大家好&#xff0c;这个系列主要给大家介绍跟诊断相关的Vector 工具CANdela和Diva&#xff0c;首先介绍CANdela。 目录 1.CANdela的简介&#xff1a; 2.如何打开CANdela 工程&#xff1a; 3.CANdela工程的详细介绍&#xff1a; 3.1 工具栏的介绍&#xff1a; 3.2 工作树的…

全新拼团模式 你一定没见过 白拿产品还有收益!

在七星拼团模式中&#xff0c;奖励制度是其核心吸引力之一。今天&#xff0c;我们将深入探讨这一模式的三种奖励&#xff1a;直推奖、滑落奖和出局奖&#xff0c;以及它们背后的互助机制。 奖励规则概述 首先&#xff0c;让我们了解一下奖励的具体规则。假设商品售价为499元&a…

自动化运维管理工具 Ansible-----【inventory 主机清单和playbook剧本】

目录 一、inventory 主机清单 1.1inventory 中的变量 1.1.1主机变量 1.1.2组变量 1.1.3组嵌套 二、Ansible 的脚本 ------ playbook&#xff08;剧本&#xff09; 2.1 playbook介绍 2.2playbook格式 2.3playbooks 的组成 2.4playbook编写 2.5运行playbook 2.5.1ans…

JavaScript中的扩展操作符作用是什么,有什么含义?

在 JavaScript 中&#xff0c;扩展操作符允许一个表达式在某些地方展开成多个元素。这个特性在 ES2015 (也叫做 ES6) 中被引入到 JavaScript 语言中&#xff0c;并广泛用于数组和对象。在您的代码示例中&#xff0c;它被用于对象。 对象中的扩展操作符 在对象字面量中使用扩展…

SolidWorks进行热力学有限元分析二、模型装配

1.先打开软件&#xff0c;新建装配体 2.选中你要装配的零件&#xff0c;直接导入就行 3.鼠标点击左键直接先放进去 4.开始装配&#xff0c;点配合 5.选择你要接触的两个面&#xff0c;鼠标右键确定&#xff0c;然后把剩下的面对齐一下就行了 6.搞定

Day1| Java基础 | 1 面向对象特性

Day1 | Java基础 | 1 面向对象特性 基础补充版Java中的开闭原则面向对象继承实现继承this和super关键字修饰符Object类和转型子父类初始化顺序 多态一个简单应用在构造方法中调用多态方法多态与向下转型 问题回答版面向对象面向对象的三大特性是什么&#xff1f;多态特性你是怎…

嵌入式学习

笔记 作业 将一张bmp图片修改成德国国旗。 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #in…

基于vue.js+thymeleaf模板引擎+ajax的注册登陆简洁模板(含从零到一详细介绍)

文章目录 前言1、数据库准备2、工具类与相关基类使用2.1、工具类2.2、相关基类 3、web包目录说明4、注册功能设计&#xff08;本文核心部分&#xff09;4.1、注册页面设计4.2、注册逻辑设计 5、登陆功能设计5.1、登陆页面设计5.2、登陆逻辑设计 6、运行效果图 前言 大多数的网…

【初阶数据结构】单链表之环形链表

目录标题 前言环形链表的约瑟夫问题环形链表环形链表|| 前言 前面我们已经学习了关于单链表的一些基本东西&#xff0c;今天我们来学习单链表的一个拓展——环形链表&#xff0c;我们将用力扣和牛客网上的三道题目来分析讲解环形链表问题。 环形链表的约瑟夫问题 我们首先来看…

Transformer详解:从放弃到入门(三)

上篇文章中我们了解了多头注意力和位置编码&#xff0c;本文我们继续了解Transformer中剩下的其他组件。 层归一化 层归一化想要解决一个问题&#xff0c;这个问题在Batch Normalization的论文中有详细的描述&#xff0c;即深层网络中内部结点在训练过程中分布的变化问题。  …

高效工作之:开源工具kettle实战

在运营商数据处理领域&#xff0c;Oracle存储过程一直是数据处理的核心工具&#xff0c;但随着技术的发展&#xff0c;寻找替代方案变得迫切。Kettle&#xff0c;作为Oracle存储过程的替代品&#xff0c;以其强大的功能和易用性&#xff0c;正逐渐受到运营商的青睐。本文将介绍…

短视频矩阵系统ai剪辑 矩阵 文案 无人直播四合一功能核心独家源头saas开发

抖去推矩阵AI小程序是一款针对短视频平台的智能创作和运营工具&#xff0c;它具有以下功能特点&#xff1a; 1.批量视频生成&#xff1a;抖去推可以在短时间内生成大量视频&#xff0c;帮助商家快速制作出适合在短视频平台上推广的内容 2.全行业覆盖&#xff1a;适用于多个行业…

品深茶的抗癌功能是否涉及虚假宣传?

品深茶说到底&#xff0c;本质还是中国传统茶叶&#xff0c;茶叶本就是一种含有多种成分的饮品&#xff0c;包括茶多酚、生物碱、氨基酸、有机酸等。这些成分对人体有一定的益处&#xff0c;如抗氧化、抗炎、抗菌等作用。 一些研究表明&#xff0c;茶叶中的某些成分如茶多酚、…

Map集合的实现类~TreeMap

重复依据&#xff1a;通过对键进行排序 先创建Student类&#xff0c;并在主函数new对象&#xff0c;然后创建TreeMap&#xff1a; 建立红黑树&#xff0c;需要在Student类后面实现类的接口&#xff1a; 重写其中的compareTo方法&#xff1a; 或者可以自定义比较器&#xff1a; …

自动语音识别

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

每天五分钟计算机视觉:通过交并比判断对象检测算法的性能

本文重点 在对象检测领域,交并比(Intersection over Union,简称IoU)是衡量算法性能的重要指标之一。它不仅直观地反映了预测框与真实框之间的重叠程度,还是判断算法是否“运行良好”的关键依据。 那个定位是好的? 对象检测任务中,我们希望不仅检测到对象,同时我们还希…

最新版Ceph( Reef版本)块存储简单对接k8s

当前ceph 你的ceph集群上执行 1.创建名为k8s-rbd 的存储池 ceph osd pool create k8s-rbd 64 642.初始化 rbd pool init k8s-rbd3 创建k8s访问块设备的认证用户 ceph auth get-or-create client.kubernetes mon profile rbd osd profile rbd pool=k8s-rbd部署 ceph-rbd-csi …

vue2人力资源项目5组织架构的增删改查

编辑表单回显 父组件&#xff1a;这里用到了父亲调子组件的方法和同步异步先后方法的处理 //methods里else if (type edit) {this.showDialog true// 显示弹层this.currentNodeId id// 记录id&#xff0c;要用它获取数据// 在子组件中获取数据// 父组件调用子组件的方法来获…