当前位置: 首页 > news >正文

JavaSE 基础语法 -逻辑控制

在我们平常的生活中,我们每天都在进行各种判断和重复操作,例如:

  • 如果今天下雨,就带伞。
  • 如果考试成绩大于或者等于60分,就及格。
  • 每天坚持跑步五公里,直到完成目标。

程序也是一样,如果程序只能从第一行一直执行到最后一行,那么它几乎无法完成任何实际业务。

因此,Java 提供了流程控制语句,让程序具备了"思考"和"循环执行"的能力。

Java 中的流程控制主要包括三种:

  • 顺序结构
  • 选择结构(分支)
  • 循环结构

一、什么是流程控制

流程控制(Flow Control)是指控制程序执行顺序的一组语法结构

Java 程序默认采用顺序执行

例如:

System.out.println("开始");System.out.println("学习 Java");System.out.println("结束");

输出:

开始 学习Java结束

程序会按照代码的书写顺序依次执行。

但在实际开发中,我们经常需要根据条件执行不同的代码,或者重复执行某段代码,这时就需要使用流程控制。

二、选择结构

2.1 if语句

if 是 Java 中最常用的条件判断语句。在if语句中,又分为单分支、双分支、多分之。

单分支if:

语法:

if(条件表达式){// 条件成立时执行}

示例:

intage=20;if(age>=18){System.out.println("已成年");}

输出:

已成年

如果条件不成立,则不会执行 if 代码块。

双分支if…else:

语法:

if(条件){// 条件成立}else{// 条件不成立}

示例:

intscore=58;if(score>=60){System.out.println("考试通过");}else{System.out.println("考试不通过");}

输出:

考试不通过

多分支if…else if:

语法:

if(条件1){}elseif(条件2){}elseif(条件3){}else{}

示例:

intscore=85;if(score>=90){System.out.println("优秀");}elseif(score>=80){System.out.println("良好");}elseif(score>=60){System.out.println("及格");}else{System.out.println("不及格");}

输出:

良好

if 判断执行流程:
程序会按照顺序依次判断条件:

  • 第一个条件成立,后面的条件将不会继续判断。
  • 所有条件都不成立,则执行 else。

因此,多个条件之间要注意顺序。

例如:

if(score>=60){}elseif(score>=80){}

这种写法是存在问题的。因为80 已经满足 >= 60,所以后面的判断永远不会执行。

正确的写法:

if(score>=90){}elseif(score>=80){}elseif(score>=60){}

注意:如果在if语句后面加上分号后,这就会导致分号成为了if语句的语句体,此时执行{ }中的代码是没有任何条件的。例如:

intx=20;if(x==20);// 因为这个结尾加了分号// 此处多写了一个分号, 导致分号成为了 if 语句的语句体, 而 { } 中的代码已经成为了和一个 if 无关的代码块,所以就会按照代码执行的顺序往下执行{System.out.println("x == 20");}

2.2 switch语句

当需要针对一个变量的多个固定值进行判断时,使用 switch 更加简洁。

语法:

switch(表达式){case1:代码;break;case2:代码;break;default:默认代码;}

示例:

intday=3;switch(day){case1:System.out.println("星期一");break;case2:System.out.println("星期二");break;case3:System.out.println("星期三");break;default:System.out.println("未知");}

输出:

星期三

break 的作用:

很多初学者容易忘记break。

例如:

intnum=1;switch(num){case1:System.out.println("A");case2:System.out.println("B");case3:System.out.println("C");}

输出:

ABC

原本只是想输出A,但是为什么会输出ABC,问题就出现在没有break,程序会发生穿透

正确的写法:

case1:System.out.println("A");break;

注意:在switch中,它并不支持任何类型的参数,Java 不同版本支持的数据类型也有所不同。

常见支持的有:

byteshortcharintStringJava7+enum(枚举)

不支持的有:

doublefloatbooleanlong

三、循环结构

循环就是重复执行代码。

Java 提供三种循环:

  • for
  • while
  • do…while

3.1 for循环

这是最常用的循环。

语法:

for(初始化;条件;更新){}

例如:

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

输出:

12345

for执行流程:

执行顺序:

初始化 ↓ 判断条件 ↓ 执行循环体 ↓ 更新变量 ↓ 继续判断(一直到条件不满足才会调整循环)

例子:

求 1 ~ 100的和:

intsum=0;for(inti=1;i<=100;i++){sum+=i;}System.out.println(sum);// 输出5050

输出九九乘法表:

for(inti=1;i<=9;i++){for(intj=1;j<=i;j++){System.out.print(j+"*"+i+"="+(i*j)+"\t");}System.out.println();}输出:1*1=11*2=22*2=4...

3.2 while循环

这个循环比较适用于循环次数未知的情况。

语法:

while(条件){}

示例:

inti=1;while(i<=5){System.out.println(i);i++;}

输出:

12345

while 与 for 的区别:

for:

for(inti=1;i<=100;i++)

适合:已知循环次数。

例如:

  • 输出 100 次
  • 遍历数组
  • 遍历集合

while:

while(passwordWrong){}

适合:不知道循环多少次。

例如:

  • 登录验证
  • 文件读取
  • Socket 通信
  • 用户输入

3.3 do…while循环

这个循环的特点就是:先执行一次,再判断条件。

语法:

do{}while(条件);

示例:

inti=1;do{System.out.println(i);i++;}while(i<=5);

输出:

12345

即使条件不成立:

inti=10;do{System.out.println(i);}while(i<5);

也会输出:10,因为这个循环是:先执行循环语句, 再判定循环条件,循环条件成立则继续执行,否则循环结束。

3.4 break 与 continue

break的作用在于:立即结束循环。

示例:

for(inti=1;i<=10;i++){if(i==5){break;}System.out.println(i);}

输出:

1234

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

continue的作用在于:结束本次循环,继续下一次循环。

示例:

for(inti=1;i<=5;i++){if(i==3){continue;}System.out.println(i);}

输出:

1245

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

3.5 循环嵌套

循环里面还可以继续写循环。

例如:

for(inti=1;i<=3;i++){for(intj=1;j<=2;j++){System.out.println(i+"-"+j);}}

输出:

1-11-22-12-23-13-2

常用于:

  • 打印图形
  • 遍历二维数组
  • 数据组合
  • 矩阵运算

3.6 死循环

所谓死循环,就是循环条件始终成立,程序无法正常结束。

例如:

while(true){System.out.println("Hello Java");}

或者:

for(;;){System.out.println("Hello Java");}

死循环并不一定是错误,在服务器程序、消息监听、网络通信等场景中会经常使用,但通常需要结合 break 或其他退出条件。

四、经典案例

案例一:判断闰年

intyear=2026;if((year%4==0&&year%100!=0)||year%400==0){System.out.println(year+" 是闰年");}else{System.out.println(year+" 是平年");}

案例二:输出 1~100 之间所有偶数

for(inti=1;i<=100;i++){if(i%2==0){System.out.println(i);}}

案例三:猜数字

Randomrandom=newRandom();Scannerscanner=newScanner(System.in);inttoGuess=random.nextInt(100);while(true){System.out.println("请输入数字:(1-100)");intnum=scanner.nextInt();if(num>toGuess){System.out.println("大了");}elseif(num<toGuess){System.out.println("小了");}else{System.out.println("猜对了");break;}}scanner.close();
http://www.cnnetsun.cn/news/3541858.html

相关文章:

  • 2026降AIGC革命:AI率92%暴降至5%!实测10款降AIGC网站!免费额度狂薅攻略
  • 突破性视频监控架构设计:如何实现5万+设备并发接入与智能级联管理
  • 5分钟掌握OBS实时标注:让直播教学效率翻倍的终极指南
  • 计算机毕业设计之基于SpringBoot的校园闲置二手物品交易商城的实现
  • 计算机毕业设计之基于asp.net网络文件存储系统的设计与实现
  • 保护PDF文件安全:Signature PDF加密存储与权限管理最佳实践
  • 深入解析eQEP模块:从编码器信号到精准运动控制的核心技术
  • Roo Code深度解析:如何将整个AI开发团队装进你的代码编辑器?
  • GEO工具怎么选?基础监测与全链路优化的质变差异
  • GO_并发编程---Goroutine
  • C语言自增运算符深度解析:从原理到指针应用与避坑指南
  • WorthBase(家底)技术架构全解析:一款本地优先的个人财务 App
  • docker compose端口暴露才能外界访问(https为例子)
  • Drain3性能优化实践:内存控制与LRU缓存策略深度调优
  • Powerlevel10k:让你的终端从黑白到彩虹的魔法配置指南
  • MCSManager完整指南:5分钟快速搭建专业游戏服务器集群
  • 计算机毕业设计之新能源汽车电池回收处理平台设计与实现
  • Node.js 极简安装指南(Mac / Windows / Linux 通用,含国内镜像)
  • 一键盘点智能管理,办公室固定资产效益提升全指南
  • 生产级机器学习系统:从模型部署到可信决策的工程实践
  • Windows系统文件dpapi.dll丢失找不到问题解决
  • Nacos服务发现与配置管理核心架构与实践指南
  • AI翻唱工具怎么选?适合换声线、修音与和声的人声处理工具
  • AI模型准确率虚高?别急调参!先排查这7类数据陷阱(含Python检测脚本)
  • ArLazyPreload实战教程:从零开始构建高性能Rails应用
  • ESLint Plugin Cypress:Cypress测试代码质量保证的终极指南
  • 开源BMS修复工具技术解析:基于Arduino的电池管理系统诊断与解锁方案
  • 企业级Agent的“自主性”到底也不知到底有多强?实测告诉你 —— 深度拆解端到端智能自动化的核心指标
  • 超星学习通自动签到终极指南:5分钟实现全自动智能签到
  • 如何用RVC WebUI实现专业级语音克隆?从零到精通的完整技术指南