Java流程控制:循环结构
一、简介
- 顺序结构的程序语句只能被执行一次,如果您想要同样的操作执行多次,就需要使用循环结构。
- Java中有三种主要的循环结构:
- 'while'循环
- 'do...while'循环
- 'for'循环
- 在Java5中还引入了一种主要用于数组的增强型for循环:'foreach'循环。
二、'while'循环
语法:
while (/* 布尔表达式 */) {
/* 循环体 */
}
描述:
- 'while'循环是Java最基本的循环。
- 在'while'循环刚开始时,会计算一次'布尔表达式'的值,若条件为真,执行循环体,然后重复上面步骤,只要布尔表达式为'true',循环就会一直执行下去。
- 而对于后来每一次额外的循环,都会在开始前重新计算一次判断是否为真,直到条件不成立,则'while'循环结束。
注意:
- 除了特殊要求,通常要让循环停止下来,我们需要一个让表达式失效的方式来结束循环。方式有:循环体内部控制、外部设立标志位等。
- 循环条件一直为'true'就会造成'死循环',我们正常的业务编程中应该尽量避免死循环,会影响程序性能,甚至造成程序卡死奔溃。
示例:
/* 计算1加到100的和,结果为在控制台输出:5050 */
public static void main(String[] args) {
int i = 0;
int sum = 0;
/* i不大于100时就会一直循环 */
while (i <= 100) {
sum += i;
i++;
}
System.out.println(sum);
}
三、'do...while'循环
语法:
do {
/* 循环体 */
} while (/* 布尔表达式 */);
描述:
- 'do…while'循环和'while'循环相似,不同的是,'while'循环先判断后执行,'do...while'循环是先执行后判断。'do…while'循环即使不满足条件,也至少会执行循环体一次。
注意:
- 'do…while'循环的布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。
- 如果布尔表达式的值为'true',则语句块一直执行,直到布尔表达式的值为'false'。
示例:
/* 结果为在控制台依次输出:5050 101 */
public static void main(String[] args) {
int i = 0;
int sum = 0;
do {
sum += i;
i++;
} while (i <= 100);
System.out.println(sum);
do {
System.out.println(i);
} while (i <= 100);
}
四、'for'循环
语法:
for (/* 初始化语句 */;/* 布尔表达式 */;/* 迭代语句 */) {
/* 循环体 */
}
描述:
- 虽然所有循环结构都可以用'while'循环或者'do...while'循环表示,但Java提供了另一种语句: 'for'循环,使一些循环结构变得更加简单。
- 'for'循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构,最常使用。
- 'for'循环执行的次数是在执行循环体前就确定的。
- 'for'循环在知道循环次数的情况下,简化了代码,提高了可读性。
执行顺序:
- 最先执行初始化语句。可以初始化同一种类型的一个或多个循环控制变量。该语句可以为空。
- 然后,检测布尔表达式的值。如果为'true',循环体被执行;如果为'false',循环终止。
- 执行一次循环体后,接着执行迭代语句,更新循环控制变量。
- 重复执行上面二、三两步:布尔表达式 -> 循环体 -> 迭代语句。直到布尔表达式结果为'false'。
示例:
/* 使用嵌套for循环在控制台打印九九乘法表 */
public static void main(String[] args) {
/* 外层for循环控制当前打印第几行 */
for (int i = 1; i <= 9; i++) {
/* 内层for循环控制当前这一行的输出 */
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + (i * j) + "\t");
}
/* 控制台打印的换行语句 */
System.out.println();
}
}
五、'foreach'循环
语法:
for (/* 变量声明语句 */ : /* 数组或集合实例 */) {
/* 循环体 */
}
描述:
- Java5引入了一种主要用于数组或集合的增强型'for'循环:'foreach'循环。
注意:
- 变量声明语句:声明新的局部变量,该变量的类型必须和数组或集合的元素类型匹配。该变量的作用域限定在循环体代码块内,在每次循环中,其指向的对象为当前遍历到的数组或集合的元素。
- 数组或集合实例:指要遍历的数组或集合实例的变量名,或者是返回值为数组或集合的方法。
示例:
/* 结果为在控制台依次输出:10 20 30 40 50 */
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
for (int i : numbers) {
System.out.println(i);
}
}
六、'break' & 'continue'关键字
Ⅰ、'break'关键字
描述:
- 'break'关键字主要用在循环语句或者’switch‘语句中,用来跳出整个语句块。
- 'break'关键字用于强行退出循环结构,不执行该循环结构中剩余的语句和剩余的循环。
注意:
- 若有多层嵌套的循环结构,'break'关键字会跳出其所在的循环语句块,并且继续执行该循环语句块下面的语句。
示例:
/* 结果为在控制台输出了1至30 */
public static void main(String[] args) {
int i = 0;
while (i <= 100) {
i++;
System.out.println(i);
if (i == 30) {
break;
}
}
}
Ⅱ、'continue'关键字
描述:
- 'continue'关键字适用于任何Java的循环结构中,作用是让程序立刻跳转到该循环结构的下一次循环的迭代。
- 'continue'关键字用在循环体中,用于终止循环结构的某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
注意:
- 在'for'循环中,'continue'关键字使程序立即跳转到迭代语句。
- 在'while'循环或者'do…while'循环中,'continue'关键字使程序立即跳转到布尔表达式的判断语句。
示例:
/* 结果为在控制台依次输出:1 3 4 */
public static void main(String[] args) {
int i = 0;
while (i < 4) {
i++;
if (i == 2) {
continue;
}
System.out.println(i);
}
}
Ⅲ、带标签的'break' & 'continue'
描述:
'goto'关键字很早就在程序设计语言中出现,常用来实现条件转移, 构成循环,跳出循环体等功能。
在Java中'goto'是一个保留字,但并未在Java中得到正式使用。然而,在'break'和'continue'这两个关键字的身上,我们仍然能看出一些'goto'的影子:带标签的'break' & 'continue'。
'标签'指后面跟一个冒号的标识符,例如:
labelName:
- 对Java来说,唯一用到'标签'的地方是在循环结构之前。而在循环结构之前设置标签的唯一理由是:我们希望在循环结构中嵌套另一个或多个循环结构,且在内层循环结构中能够直接跳转到外层循环结构。而'break'和'continue'关键字通常只能中断当前循环结构,但若随同标签使用,它们就会中断到存在标签的地方。
示例:
/* 打印100到150之间的质数,结果为在控制台依次输出:101 103 107 109 113 127 131 137 139 149 */
public static void main(String[] args) {
outer:
for (int i = 100; i <= 150; i++) {
for (int j = 2; j < i / 2; j++) {
if (i % j == 0) {
continue outer;
}
}
System.out.println(i);
}
}
Java流程控制:循环结构的更多相关文章
- Java流程控制与Scanner类的使用
Java流程控制与Scanner类的使用 Scanner类 Scanner类可以使程序接受键盘输入,实现人机交互 一个完整的Scanner的使用例子: //创建一个扫描器对象,用于接收键盘数据 Sca ...
- IT兄弟连 Java语法教程 流程控制语句 控制循环结构1
Java语言没有提供goto语句来控制程序的跳转,这种做法提高了程序流程控制的可读性,但降低了程序流程控制的灵活性.为了弥补这种不足,Java提供了continue和break来控制循环结构.除此之外 ...
- 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结
053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句
050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...
- 049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句
049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句 本文知识点:break语句 break语句 break语句前情回顾 1.swi ...
- 048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和
048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例--阶乘的累加和 本文知识点:通过案例练习嵌套循环应用 案例练习--阶乘的累加和 案例题目 ...
- 047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用
047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用 本文知识点:嵌套while循环应用 什么是循环嵌套? 什么是循环嵌套? ...
- 046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项
046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项 本文知识点:for循环的注意事项 for循环的注意事项 for循环有3个 ...
随机推荐
- docker第一日学习总结
查看当前所有的镜像 docker images 查看当前运行的容器 docker ps 一般容器分为后台驻留和闪退(ubuntu\busybox等)两种,对于后台驻留的,我们如果想进入这个容器(前提是 ...
- Kibana,Logstash 和 Cerebro 的安装运行
公号:码农充电站pro 主页:https://codeshellme.github.io 1,安装 Kibana Kibana 用于数据可视化,我们可以进入到 Kibana 下载页面下载 Kibana ...
- nginx反向代理signalr
asp.net core应用常常要通过nginx来反向代理, 普通的web api配置asp.net core反向代理比较常见, 如果在应用中集成了signalr, 如何使用nginx来反代呢? ng ...
- 2019ICPC南昌站
ICPC比CCPC场面要更大的感觉,这是我的第一印象. 这场比赛教练和我们一起去的,有教练陪着也挺好的,一起吃了吃饭.后来我们吃饭就发现江西这边辣就只是辣,没啥味道,不过拌粉还是可以的.还有江西师范大 ...
- Grakn Forces 2020
比赛链接:https://codeforces.com/contest/1408 A. Circle Coloring 题意 给出三个长为 $n$ 的序列 $a,b,c$,对于每个 $i$,$a_i ...
- 2020 年百度之星·程序设计大赛 - 初赛一Dec 简单dp
题意: Problem Description 初始有 a, ba,b 两个正整数,每次可以从中选一个大于 1 的数减 1,最后两个都会减到 1,我们想知道在过程中两个数互质的次数最多是多少. Inp ...
- HDU 3537 Daizhenyang's Coin 翻硬币博弈
题意: 给你n个硬币,你可以从中拿出来1.2.3个硬币,它们不一定要连续,你只需要保证拿出来的硬币中那个下标最大的硬币一定要是正面朝上,最后谁不能操作,谁就输了 题解: 翻硬币游戏 结论: 局面的SG ...
- Warm up HDU - 4612 树的直径
题意:给出n个点和m条边的无向图,存在重边,问加一条边以后,剩下的桥的数量最少为多少. 题解: 你把这个无向图缩点后会得到一个只由桥来连接的图(可以说这个图中的所有边都是桥,相当于一棵树),然后我们只 ...
- PowerShell随笔3 ---别名
上一篇提到了别名,这个有必要说一下,因为我们常常会遇到以下两种情况: 自己写脚本,想快速一些,使用命名 看别人的脚本,发现别人和你想的一样,用了别名,但是你忘记了这个别名是什么意思. 我们可以通过Ge ...
- .NetCore快速上手Consul,留给自己一点思考的空间
互联网热潮下,"微服务"技术架构成为了一种高大上的技术,其顾名思义就是将传统的大的业务服务拆分成独立的小服务,当拆分的服务慢慢多起来的时候,我们会发现服务地址很难管理,传统的方式一 ...