流程控制之循环结构(一)
1.循环结构的概念和分类
(1)循环结构的概念
循环,即事物周而复始的变化。
循环结构,使一部分代码按照次数或一定的条件反复执行的一种代码结构。
(2)循环结构的分类
- for循环
- while循环
- do…while循环
2.for 循环
(1)for循环语句
- 格式:
for(初始化语句;判断条件语句;控制条件语句) {
//循环体
} - 执行流程,如下图
(2)for循环案例
Demo1
- 需求:在控制台输出五次HelloWorld
- 代码演示
/*
for循环
格式:
for(初始化语句; 判断条件语句; 控制条件语句){
循环体
}
执行流程:
第一次循环: 选执行初始化语句, 然后执行判断条件语句,
如果条件不成立, 循环结束
如果条件成立, 执行循环体,然后执行控制条件语句,此时,第一次循环执行结束
第二次循环: 执行判断条件语句
如果条件不成立, 循环结束
如果条件成立, 执行循环提,然后执行控制条件语句,此时,第一次循环执行结束
以此类推
*/
public class ForDemo1 {
public static void main(String[] args) {
// 需求:打印五次HelloWorld
for (int i = 1; i <= 5; i++) {
System.out.println("HelloWorld");
}
}
}
- 运行结果
Demo2
- 需求:打出数字1-5,打出数字5-1
- 代码演示
public class ForDemo2 {
public static void main(String[] args) {
// 需求1:打印1-5之间的数字
// 方式1:传统做法
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
System.out.println("----------------------");
// 通过观察上述的代码,我们发现,输出语句的次数是固定的,只有输出语句里边的内容在发生变化
// 针对于这种情况,就可以采用for循环来解决
// 方式2:采用for循环
for (int i = 1; i <=5; i++) {
System.out.println(i);
}
System.out.println("----------------------");
// 需求2:打印5-1之间的数字
for (int i = 5; i >= 1; i--) {
System.out.println(i);
}
}
}
- 运行结果
Demo3
- 需求:求出1-5之间数字之和
- 代码演示
public class ForDemo3 {
public static void main(String[] args) {
// 需求:计算1-5之间的所有数据之和
// 1.定义求和变量sum
int sum = 0;
// 2.通过for循环获取1-5之间的数据
for(int i = 1; i <=5; i++) {
// i记录的就是:1-5之间的所有数字
// 3.把获取到的数据依次累加给变量sum
// sum = sum + i;
sum += i;
}
// 4.打印结果
System.out.println(sum);
}
}
- 运行结果
Demo4
- 需求:求出1-100之间偶数和
- 代码演示
public class ForDemo4 {
public static void main(String[] args) {
// 需求:计算1-100之间的所有偶数和
// 1.定义一个求和变量sum
int sum = 0;
// 2.获取1-100之间所有的数据
for (int i = 1; i <= 100; i++) {
// 循环体
// i的值其实就是1-100之间的数字,只要判断i是否是偶数即可
// 3.判断当前获取到的数据是否是偶数,是就累加
if (i % 2 == 0) {
//能走到这里,说明i是偶数,累加即可
sum += i;
}
}
// 4.打印结果
System.out.println("sum:" + sum);
}
}
- 运行结果
Demo5
- 需求:在控制台输出所有的“水仙花数”
- 代码演示
public class ForDemo5 {
public static void main(String[] args) {
/*
需求:打印所有的水仙花数
水仙花数解释:指的是一个三位数,其各位数字的立方和等于它本身,例如:
1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 =153
*/
// 1. 通过for循环,获取所有的三位数
for(int i = 100; i < 1000; i++) {
// i表示就是所有的三位数
// 2. 获取该数据的个位,十位,百位数字
int ge = i % 10;
int shi = i/10%10;
int bai = i/10/10%10;
// 3. 判断改数字是否是水仙花数,如果是,直接打印即可
if (ge*ge*ge + shi*shi*shi +bai*bai*bai == i){
// 能走到这里说明i是水仙花数
System.out.println(i);
}
}
}
}
- 运行结果
Demo6
- 需求:统计所有的“水仙花数”的个数
- 代码演示
public class ForDemo6 {
public static void main(String[] args) {
// 需求:打印所有的水仙花数的个数
// 1. 定义一个计数器,用来记录水仙花数的个数
int count = 0;
// 2. 获取所有的三位数
for (int i = 100 ; i < 1000; i++) {
// i记录的就是所有的三位数
// 3. 获取到该数字的个位,十位,百位
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 10 / 10 % 10;
// 4.判断改数字是否是水仙花数,如果是,计数器自增
if (ge*ge*ge + shi*shi*shi + bai*bai*bai == i){
// 能走到这里,说明i是一个水仙花数
// count = count + 1;
// count++;
++count;
}
}
// 5. 打印计数器的结果即可
System.out.println(count);
}
}
- 运行结果
3.while循环
(1)while循环语句格式
- 格式
初始化语句;
while(判断条件语句) {
循环体语句
控制条件语句
} - 注意事项:
初始化语句可以省略
控制条件语句可以省略 - 执行流程,如下图
(2)while循环案例
Demo1
- 需求:使用while循环在控制台输出五次HelloWorld
- 代码演示
public class WhileDemo1 {
public static void main(String[] args) {
// 需求:打印五次HelloWorld
// 方式一:通过for循环实现
for (int i = 1; i <= 5; i++) {
System.out.println("HelloWorld");
}
System.out.println("--------------");
// 方式二:通过while循环实现
// 初始化语句
int i = 1;
// 判断条件语句
while (i <= 5) {
// 循环体语句
System.out.println("HelloWorld");
// 控制条件语句
i++;
}
}
}
- 运行结果
Demo2
- 需求:求1-100之间的数据和
- 代码演示
public class WhileDemo2 {
public static void main(String[] args) {
// 需求;计算1-100之间的所有数据之和
// 1. 定义一个求和变量sum
int sum = 0;
// 2. 通过while循环,获取1-100之间所有的数据
// 初始化语句
int a = 1;
// 判断语句
while (a <= 100){
// 循环体语句
// 3. 将获取到的数据累加给变量sum
sum += a;
// 控制条件语句
a++;
}
// 4. 将sum的结果打印到控制台上
System.out.println(sum);
}
}
- 运行结果
4.do…while循环
(1)do…while循环语句格式
- 格式:
初始化语句;
do {
循环体语句;
控制调价语句;
} while(判断条件语句); - 注意事项:
while小括号后的分号不可省略
do…while循环的循环体语句至少执行1遍 - 执行流程,如下图
(2)do…while循环案例
Demo1
- 需求:用do…while循环模拟:学完一个知识,至少练习1次
- 代码演示
public class DoWhileDemo {
public static void main(String[] args) {
// 1. 定义一个变量,记录练习次数
int count = 1;
// 2. 定义一个变量,用来标记是否学会这个知识点,true:学会了 false:没学会
boolean isOK = false;
// 3. 在do..while循环中模拟这个动作
do {
// 输出练习次数
System.out.println("正在进行第" + count + "次练习");
// 判断练习次数,看是否不小于三,如果条件成立,表示学会了
if (count >= 3) {
// 能进来,说明学会了
// 将boolean类型变量的值变为:true
isOK = true;
}
// 不管是否学会。每练习一次,次数要+1
count++;
}while (!isOK);
}
}
- 运行结果
5,三种循环的区别
(1)格式的不同
for循环各部分形成一个整体,
while和do…while的初始化语句与循环定义分离;
while、do…while的初始化语句、控制语句一般都会省略,而for循环一般不省略
(2)初始化语句的不同
定义位置不同;
作用于不同:
for循环初始化语句仅限循环内使用
while和do…while的初始化语句可以在循环外使用
(3)循环体执行次数的不同
for和while循环执行0-n次;
do…while执行1-n次,即至少执行一次;
(4)使用场景的不同
for和while可以互换,但while格式更简洁;
仅当循环体至少需要执行一次时使用do…while