Java流程控制-循环控制

发布时间 2023-12-09 14:22:41作者: 测试开发孵化园

免责声明:java基础资料均来自于韩顺平老师的《循序渐进学Java零基础》教案,具体视频内容可以去B站观看,这些资料仅用于学习交流,不得转载用于商业活动

1.循环控制

1.1 for循环

基本语法:

for(循环变量初始化;循环条件;循环变量迭代){

  循环操作(可以多条语句);

}

说明:

  • for关键字,表示循环控制
  • for有四要素(1)循环变量初始化(2)循环条件(3)循环操作(4)循环变量迭代
  • 如果循环操作只有一条语句,可以省略{},建议不要省略

循环执行流程分析

注意事项和细节说明:

  • 循环条件是返回一个布尔值的表达式
  • for(;循环判断条件;)钟的初始化和变量迭代可以写到其他地方,但是两边的分号不能省略
  • 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开
public class For01 {
    public static void main(String[] args) {
        int count=3;
        for(int i=0,j=0;i<count;i++,j+=2){
            System.out.println("i="+i+",j="+j);
            /*输出
            i=0,j=0
            i=1,j=2
            i=2,j=4
             */
        }
    }
}

1.2 while循环

 基本语法:

循环变量初始化;

while(循环条件){

  循环体(语句);

  循环变量迭代;

}

while循环也有四要素,只是四要素放的位置和for不一样

while循环执行流程分析

public class While01 {
    public static void main(String[] args) {
        //打印1-100之间所有能被3整除的数
        int i=1;
        int endNum=100;
        while (i<=endNum){
            if (i%3==0){
                System.out.print(i+"\t");
            }
            i++;
        }
    }
}

1.3 do...while循环

基本语法:

循环变量初始化;

do{

  循环体(语句);

  循环变量迭代;

}while(循环条件);

说明:

  • do...while也有循环四要素,只是位置不一样
  • 先执行,再判断,也就是说,一定会至少执行一次
  • 最后有一个分号;

do...while流程分析

 

 1 public class DoWhile01 {
 2     public static void main(String[] args) {
 3         //统计1-200之间能被5整除但不能被3整除的数的个数
 4         int i=1;
 5         int endNum=200;
 6         int count=0;
 7         do{
 8             if(i%5==0 && i%3!=0){
 9                 count++;
10             }
11             i++;
12         }while (i<=endNum);
13         System.out.println("1-200之间能被5整除但不能被3整除的数的个数:"+count);
14     }
15 }

1.4 多重循环(难点,重点)

1)将一个循环放在另一个循环体内,就形成了嵌套循环。其中for,while,do...while均可作为外层循环和内存循环

【建议一般使用两层,最多不要超过三层,否则,代码可读性很差】

2)实际上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环

才可以结束外层循环的当次循环,开始下一次的循环

3)设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次

for(int i=1;i<=7;i++){//第一层循环7
    for(int j=1;j<=2;j++){//第二层循环2
           System.out.println("您好...") //7*2=14
    }        
}

例子

 1 public class MulFor01 {
 2     public static void main(String[] args) {
 3         //统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分【学生成绩从键盘输入】
 4         //统计三个班及格人数,每个班有5名同学
 5         Scanner sc = new Scanner(System.in);
 6         double totalScore = 0;//所有班级学生的总分
 7         int passNum = 0;//及格人数
 8         int classNum = 3;//班级数
 9         int studentNum = 5;//学生人数
10         for (int i = 1; i <= classNum; i++) {//表示班级
11             double sum = 0;//一个班级的总分
12             for (int j = 1; j <= studentNum; j++) {//表示学生
13                 System.out.print("请输入第" + i + "个班的第" + j + "个学生的成绩:");
14                 double score = sc.nextDouble();
15                 if (score >= 60) {
16                     passNum++;
17                 }
18                 sum += score;
19             }
20             System.out.println("第" + i + "个班的平均分:" + sum / studentNum);
21             totalScore += sum;
22         }
23         System.out.println("所有班级平均分:" + totalScore / (classNum * studentNum));
24         System.out.println("及格人数:" + passNum);
25     }
26 }

 1.4.1 练习一:打印99乘法表

 1 public class MuFor02 {
 2     public static void main(String[] args) {
 3         //打印九九乘法表
 4         int num=11;
 5         for(int i=1;i<=num;i++){
 6             for(int j=1;j<=i;j++){
 7                 System.out.print(j+"*"+i+"="+i*j+"\t");
 8             }
 9             System.out.println();
10         }
11     }
12 }

 1.4.2 练习二:打印金字塔

 1 public class MulFor03 {
 2     public static void main(String[] args) {
 3         /**
 4          *     * 4-3=1
 5          *    *** 4-2=2
 6          *   ***** 4-1=3
 7          *  ******* 4-0=4
 8          */
 9         //打印等腰三角形
10         Scanner sc=new Scanner(System.in);
11         System.out.print("请输入要打印的三角形的行数:");
12         int line=sc.nextInt();
13 
14         for (int i = 1; i <=line; i++) {
15 
16             for (int j=1;j<=line-i;j++){
17                 System.out.print(" ");
18             }
19             for (int k=1;k<=2*i-1;k++){
20                 System.out.print("*");
21             }
22             System.out.println();
23         }
24     }
25 }

1.4.3 练习三:打印空心金字塔

 1 public class MulFor03 {
 2     public static void main(String[] args) {
 3         /**
 4          *     * 4-3=1
 5          *    *** 4-2=2
 6          *   ***** 4-1=3
 7          *  ******* 4-0=4
 8          */
 9         //打印等腰三角形
10         Scanner sc=new Scanner(System.in);
11         System.out.print("请输入要打印的三角形的行数:");
12         int line=sc.nextInt();
13 
14         for (int i = 1; i <=line; i++) {
15 
16             for (int j=1;j<=line-i;j++){
17                 System.out.print(" ");
18             }
19             for (int k=1;k<=2*i-1;k++){
20                 if(k==1||k==2*i-1 ||i==line) {
21                     System.out.print("*");
22                 }else {
23                     System.out.print(" ");
24                 }
25             }
26             System.out.println();
27         }
28     }
29 }

 

1.4.4 练习三:打印菱形

 1 public class MutFor04 {
 2     public static void main(String[] args) {
 3         /**
 4          * &&*&&
 5          * &***&
 6          * *****  *******
 7          * &***&   &*****  1 2*2-1=3
 8          * &&*&&    &&*** 2  2*1-1=1
 9          *        &&&*
10          */
11         //打印菱形
12         //打印等腰三角形
13         Scanner sc=new Scanner(System.in);
14         System.out.print("请输入要打印菱形的行数:");
15         int line=sc.nextInt();
16 
17         for (int i = 1; i <=line/2+1; i++) {
18 
19             for (int j=1;j<=(line/2+1)-i;j++){
20                 System.out.print(" ");
21             }
22             for (int k=1;k<=2*i-1;k++){
23                 System.out.print("*");
24             }
25             System.out.println();
26         }
27         for(int i=line/2;i>=1;i--){
28             for (int k=1;k<=(line/2+1)-i;k++){
29                 System.out.print(" ");
30             }
31             for (int j=2*i-1;j>=1;j--){
32                 System.out.print("*");
33             }
34             System.out.println();
35         }
36     }
37 }

1.4.5 练习四:打印空心菱形

 1 public class MutFor04 {
 2     public static void main(String[] args) {
 3         /**
 4          * &&*&&
 5          * &***&
 6          * *****  *******
 7          * &***&   &*****  1 2*2-1=3
 8          * &&*&&    &&*** 2  2*1-1=1
 9          *        &&&*
10          */
11         //打印菱形
12         //打印等腰三角形
13         Scanner sc=new Scanner(System.in);
14         System.out.print("请输入要打印菱形的行数:");
15         int line=sc.nextInt();
16 
17         for (int i = 1; i <=line/2+1; i++) {
18 
19             for (int j=1;j<=(line/2+1)-i;j++){
20                 System.out.print(" ");
21             }
22             for (int k=1;k<=2*i-1;k++){
23                 if(k==1||k==2*i-1 ||i==line) {
24                     System.out.print("*");
25                 }else {
26                     System.out.print(" ");
27                 }
28             }
29             System.out.println();
30         }
31         for(int i=line/2;i>=1;i--){
32             for (int k=1;k<=(line/2+1)-i;k++){
33                 System.out.print(" ");
34             }
35             for (int j=2*i-1;j>=1;j--){
36                 if(j==1||j==2*i-1 ||i==line) {
37                     System.out.print("*");
38                 }else {
39                     System.out.print(" ");
40                 }
41             }
42             System.out.println();
43         }
44     }
45 }

1.5 跳转控制语句

1.5.1 break

break语句用于终止某个语句块的执行,一般使用在switch或者循环钟

基本语法:

{

  ...

  break;

  ...

}

以while使用break为例,画出示意图

public class BreakDemo {
    public static void main(String[] args) {
        //1-100以内的数求和,求出当和第一次大于20的当前数
        int endNum=100;
        int sum=0;//累加和
        for(int i=1;i<=endNum;i++){
            sum+=i;
            if(sum>20){
                System.out.println("和第一次大于20的当前数:"+i);//6
                break;
            }
        }
    }
}

标签的使用:

public class Break02 {
    public static void main(String[] args) {
        //标签的使用

        lable1:
        for(int j=1;j<=5;j++){
            lable2:
            for (int i = 0; i < 10; i++) {
                if(i==2){
                    break lable1;
                }
                System.out.println("i="+i);
            }
        }
    }

}

 注意事项和细节说明:

  • break语句出现在多层嵌套的语句块钟时,可以通过标签知名要终止的是哪一层语句块
  • break语句可以指定退出哪层
  • lable1是标签,名字由程序员指定
  • break后指定到哪个label就退出到哪里
  • 实际开发中尽量不要使用标签
  • 如果没有指定标签,就默认退出最近的循环体

1.5.2 continue

1)continue语句用于结束本次循环,继续执行下一次循环

2)continue语句出现在多层嵌套循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这个和前面的标签的使用规则是一样的

基本语法:

{

...

continue;

...

}

以while使用continue为例,画出示意图

 

 1 public class Continue01 {
 2     public static void main(String[] args) {
 3         label1:
 4         for(int j=0;j<3;j++){
 5             label2:
 6             for(int i=0;i<10;i++){
 7                 if (i==3){
 8                     //continue;
 9                     //continue label2;
10                     continue label1;
11                 }
12                 System.out.println("i="+i);
13             }
14         }
15     }
16 }

1.5.3 return

return使用在方法,表示跳出所在的方法,在讲解方法的时候,会详细介绍,这里简单的提以下

如果return写在main方法,退出程序Return01.java

 1 public class Return01 {
 2     public static void main(String[] args) {
 3         for (int i = 1; i <=5 ; i++) {
 4             if(i==3){
 5                 System.out.println("您好呀"+i);
 6                 return;
 7             }
 8             System.out.println("i="+i);
 9         }
10         System.out.println("go on...");
11     }
12 }