循环结构 | 我的日常分享

循环结构

循环结构

  • 概念:通过某个条件,重复地执行一段逻辑代码。

    image-20220120154013169

一、while循环

  • 语法

    1
    2
    3
    while(布尔表达式){
    //逻辑代码(循环操作)
    }
  • 执行流程

    • 先对布尔表达式进行判断,结果为true,则执行逻辑代码。
    • 本次执行完毕后,再次对布尔表达式进行判断,结果仍旧为true,则再次执行逻辑代码。
    • 直至布尔表达式的结果为false时,才会退出循环结构,执行后续代码。

案例1:打印100遍hello world

1
2
3
4
5
6
7
8
9
public class TestWhile{
public static void main(String[] args){
int i=1;//1.初始部分:用以判断的变量
while(i<=100){//2.循环条件:决定是否继续循环的依据
System.out.println("Hello world");//3.循环操作:单次执行的逻辑代码或任务
i++;//4.迭代部分:控制循环条件改变的增量
}
}
}

运行结果:

image-20220120160159140

注意:循环有四部分,初始部分、循环条件、循环操作、迭代部分组成。

while循环特点:首次即有入口条件,先判断,再执行,适用于循环次数明确的情况。首次判断不满足,则一次都不会执行。(执行次数:0~n次)。

案例2:求1~100和。

1
2
3
4
5
6
7
8
9
10
11
public class TestSum1{
public static void main(String[] args){
int i = 1;
int sum = 0;
while(i<=100){
sum = sum + i;
i++;
}
System.out.println(sum);
}
}

运行结果:

image-20220120162824709

案例3:求1~100偶数的和奇数的和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class TestSum2{
public static void main(String[] args){
int i = 1;
int sum1 = 0;
int sum2 = 0;
while(i<=100){
if(i % 2 == 0){//判断偶数
sum1 = sum1 + i;
}
if(i % 2 == 1){//判断奇数
sum2 = sum2 + i;
}
i++;
}
System.out.println("偶数和为:"+sum1);
System.out.println("奇数和为:"+sum2);
}
}

运行结果:

image-20220120163111092

二、do while循环

案例1:打印100遍hello world

1
2
3
4
5
6
7
8
9
public class TestDoWhile{
public static void main(String[] args){
int i=1;
do{
System.out.println("hello world" + i);
i++;
}while(i<=100);
}
}

运行结果:

image-20220120163601644

特点:直接执行循环操作,首次没有入口条件,先执行,再判断,执行一遍逻辑代码后,再去判断条件是否满足,如满足,则继续循环,不满足则退出循环。所以则至少执行一次(执行次数:1~n次)。

dowhile的应用场景

适用于循环次数不明确的情况。

案例1:检查学生作业完成情况,输入教师评语,决定学生是否需要抄写代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.Scanner;
public class TestDoWhile{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
char answer;
do{
System.out.println("学生将作业给老师检查");
System.out.print("教师输入评语:");
answer = input.next().charAt(0);
}while(answer != 'y');
input.close();
}
}

运行结果:

gif

学生完成作业,给老师检查,老师通过则结束,老师未通过则重写后给老师再次检查,如此往复。(循环次数不明确)

三、for循环

  • 语法

    whiledo while循环一致,均有四部分。

    1
    2
    3
    for(初始部分;循环条件;迭代部分){
    //循环操作
    }
  • 执行流程

    1. 首次执行初始部分(仅一次)。
    2. 对布尔表达式进行判断,结果为true,则执行逻辑代码。
    3. 本次执行完毕后,执行迭代部分,再次判断,结果仍为true,则再次执行逻辑代码。
    4. 直至布尔表达式的结果为false时,才会退出循环结构,执行后续代码。

案例1:打印100遍hello world

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class TestFor{
public static void main(String[] args){
/*在while中打印100遍hello world,
*我们可以这样写,为了便于观察,这里打印3遍
*/
int i=1;//1. 初始部分
while(i<=3){//2.循环条件
System.out.println("hello world");//3.循环操作
i++;//4.迭代条件
}
System.out.println("*****************");
/*
*将上面代码改为for循环,先将while改为for,
*再在循环条件前后加分号,这就成为了for循环
*/
i=1;//1. 初始部分
for(;i<=3;){//2.循环条件
System.out.println("hello world");//3.循环操作
i++;//4.迭代条件
}
System.out.println("*****************");
/*
*优化一下上面for循环代码,可以
*将1.初始部分移动到for循环中,
*也可以将4.迭代条件移动到for循环中
*/
for(i=1;i<=3;i++){//1. 初始部分2.循环条件4.迭代条件
System.out.println("hello world");//3.循环操作
}
}
}

运行结果:

分别正常打印了三遍hello world

image-20220121090950838

案例2:控制台输入整数n,计算n的阶乘(!n)。例:1 * 2 * 3 ··· * n

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.Scanner;
public class TestFactorial{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int sum = 1;
for(int i=1;i<=n;i++){
sum = sum * i;
}
System.out.println(n+"的阶乘为:"+sum);
input.close();
}
}

运行结果:

image-20220121091751627

案例3:一个班级5位同学,通过控制台输入5名同学的分数,计算平均分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* @author :贾小宇
* @program: Test
* @create :2022-01-21 09:37
* @description
*/
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
double sum = 0;
for(int i=0;i<5;i++){
System.out.print("请输入第"+(i+1)+"位同学的分数:");
double score = input.nextDouble();
sum = sum + score;
}
double avg = sum/5.0;
System.out.println("平均分为:"+avg);
input.close();
}
}

运行结果:

image-20220121094050144

四、流程控制

1、break:终止、跳出switch或循环结构。

案例1:

1
2
3
4
5
6
7
8
9
10
public class TestBreak{
public static void main(String[] args){
for(int i=0;i<10;i++){
if(i==5){
break;
}
System.out.println("当前循环次数:"+i);
}
}
}

运行结果:

当运行的第6次的时候跳出了整个循环。

image-20220121103337191

2、continue:结束本次循环、进入下次循环,仅仅针对循环结构有效。

案例1:

1
2
3
4
5
6
7
8
9
10
public class TestContinue{
public static void main(String[] args){
for(int i=0;i<10;i++){
if(i==5){
continue;
}
System.out.println("当前循环次数:"+i);
}
}
}

运行结果:

i=5次结束本次循环。

image-20220121103704267

五、嵌套循环

  • 概念:在一个完整的循环结构中,乔涛另一个完整的循环结构。

案例1:打印3行5颗星。

1
2
3
4
5
6
7
8
9
10
public class TestNestFor{
public static void main(String[] args){
for(int i=0;i<3;i++){
for(int j=0;j<5;j++){
System.out.print("*");
}
System.out.println();
}
}
}

运行结果:

image-20220121104145112

案例2:打印直角三角形

1
2
3
4
5
6
7
8
9
10
public class TestNestFor1{
public static void main(String[] args){
for(int i=0;i<6;i++){
for(int j=0;j<i;j++){
System.out.print("*");
}
System.out.println();
}
}
}

运行结果:

image-20220121104435580

案例3:打印九九乘法表

1
2
3
4
5
6
7
8
9
10
public class TestNestFor2{
public static void main(String[] args){
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+(i*j)+"\t");
}
System.out.println();
}
}
}

运行结果:

image-20220121104859331

案例3:打印等腰三角形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class TestNestFor3{
public static void main(String[] args){
int n=11;
for(int i=0;i<n/2;i++){
for(int j=0;j<n/2-i;j++){
System.out.print(" ");
}
for(int j=0;j<i*2+1;j++){
System.out.print("*");
}
System.out.println();
}
}
}

运行结果:

image-20220121110659940