4. 循环结构

循环结构

  1. 程序中的循环

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

  2. while循环

    语法:

    ​ while(布尔表达式) {

    ​ //逻辑代码(循环操作)

    }

    执行流程:

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

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

    注:循环有四部分组成

    练习:以下代码,哪一行是初始部分?哪一行是迭代部分?

    public class TestWhile {
        public static void main(String[] args) {
            int a = 1;
            int b = 1;
            int c = 1;//初始部分
            
            while (c <= 100) {
                System.out.println("Hello");
                a++;
                b++;
                c++;//迭代部分
            }
        }
    }
    

    注:被循环条件判断的变量,才是初始部分和迭代部分

  4. while循环的特点

    public class TestWhile {
        public static void main(String[] args) {
            int i = 1000;
            while(i <= 100) {
                System.out.println("HelloWorld");
            }
            System.out.println("程序结束");
        }
    }
    

    注:首次判断不满足,则一次都不会执行(执行次数:0~n次)

    特点:首次即是入口条件,先判断,再执行,适用于循环次数明确的情况

  5. 课堂案例

    1.计算1 + 2 + 3 + 4 +...+ 98 + 99 + 100的总和
    2.计算1~100之间,所有偶数的和
    
  6. do while循环

    语法:

    ​ do{

    ​ 逻辑代码(循环操作)

    } while(布尔表达式);

    执行流程:

    1. 先执行一次循环操作之后,再进行布尔表达式的判断
      1. 如果结果为true,则再次执行循环操作
      2. 如果结果为false,才会退出循环结构,执行后续代码
  7. do while的特点

    public class TestDoWhile {
        public static void main(String[] args) {
            int i = 1;
            do{
                System.out.println("HelloWorld");
                i++;
            }while(i <= 100);//判断满足,则循环;不满足,则至少执行一次(执行次数:1~n次)
        }
    }
    

    特点:首次没有入口条件,先执行,再判断

  8. do while的应用场景

    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("抄写作业");
                answer = input.next().charAt(0);//输入y,表示及格,退出循环;否则继续循环
            }while(answer != 'y');
            
            System.out.println("作业已完成");
     
        }
    }
    

    应用场景:适用于循环次数不明确的情况

  9. for循环

    语法:

    ​ for(初始条件;循环条件;迭代部分) {

    ​ //循环操作

    }

    执行流程:

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

    public class TestFor {
        public static void main(String[] args) {
            for (int i = 1;i <= 100;i++) {
                System.out.println("Hello");
            }
            System.out.println("程序结束");
        }
    }
    

    代码分析如下:int i = 1;1. 初始部分(只执行一次)

    ​ i <= 100;2. 循环条件

    ​ System.out.println(“Hello”);3. 循环操作

    ​ i++;4. 迭代部分

    注:for循环与while循环相同,首次判断不满足;则一次都不会执行(执行次数:0 ~ n次)

    特点:首次即有入口条件,先判断、再执行,适用于循环次数明确的情况

    import java.util.Scanner;
    
    public class TestMultiply {
    	public static void main(String[] args) {
    		//需求:控制台输入整数n,计算n的阶乘
    		Scanner input = new Scanner(System.in);
    		
    		System.out.println("请输入一个需要计算阶乘的整数:");
    		
    		int num = input.nextInt();
    		int sum = 1;
    		
    		for(int i = 1 ; i <= num ; i++){
    			
    			sum = sum * i;
    		}
    		
    		System.out.println(sum);
    		
    	}
    }
    
    import java.util.Scanner;
    
    public class TestAverageScore {
    	public static void main(String[] args) {
        // 现有一个班级的5名学生,请通过控制台输入5名学生的分数,求平均数
    		Scanner input = new Scanner(System.in);
    		
    		float sum = 0F;
    		
    		for(int i = 1 ; i <= 5 ; i++){
    			System.out.println("请输入学生的成绩:");
    			float num = input.nextFloat();
    			sum += num;
    		}
    		
    		float average = sum/5F;
    		
    		System.out.println(average);
    		
    	}
    }
    
  11. 流程控制

    break:终止,跳出switch、循环条件

    public static TestBreak {
        public static void main(String[] args) {
            for(int i = 1;i <= 10; i++) {
                if(i == 5) {
                    break;
                }
                System.out.println("当前次数:" + i);
            }
            System.out.println("循环结束");
        }
    }
    

    注:循环执行中,遇到break,则推出整个循环结构

    break练习如下:

    import java.util.Scanner;
    
    public class TestAverageScore {
    	public static void main(String[] args) {
        // 现有一个班级的5名学生,请通过控制台输入5名学生的分数,求平均数
    		Scanner input = new Scanner(System.in);
    		//如果输入过程中,存在非法数据,则整班成绩作废
    		
    		boolean flag = true;//true 代表合法
    		double sum = 0D;
    		
    		for(int i = 1 ; i <= 5 ; i++){
    			System.out.println("请输入第" + i + "学生的成绩:");
    			
    			double score = input.nextDouble();
    			if(score < 0 || score > 100) {
    				
    				flag = false;// 存在非法数据
    				break;
    	
    			}
    			sum += score;
    		}
    		if(flag) {
    			double average = sum/5;
    			System.out.println(average);
    		}else {
    			System.out.println("输入有误,请重新输入!");
    		}
    	}
    }
    

    continue:结束本次,进入下一次循环

    public static TestBreak {
        public static void main(String[] args) {
            for(int i = 1;i <= 10; i++) {
                if(i == 5) {
                    continue;
                }
                System.out.println("当前次数:" + i);
            }
            System.out.println("循环结束");
        }
    }
    

    注:循环执行中,遇到continue,则跳过此次,进入下一次循环

    continue练习如下:

    import java.util.Scanner;
    
    public class TestContinue {
    	public static void main(String[] args) {
        // 现有一个班级的5名学生,请通过控制台输入5名学生的分数,求平均数
    		Scanner input = new Scanner(System.in);
    		//如果输入过程中,存在非法数据,则整班成绩作废
    		
    		double sum = 0D;
    		
    		for(int i = 1 ; i <= 5 ; ){
    			
    			System.out.println("请输入第" + i + "学生的成绩:");
    			
    			double score = input.nextDouble();
    			
    			if(score < 0 || score > 100) {
    				
    				continue;
    				
    			}
    			
    			sum += score;
    			i++;
    		}
    		
    		double avg = sum / 5;
    		
    		System.out.println(avg);
    	}
    }
    

    流程控制总结:

    import java.util.Scanner;
    
    public class TestGuess {
    	public static void main(String[] args) {
    		
    		Scanner input = new Scanner(System.in);
    		
    		// 人机猜拳(1.剪刀 2.石头 3. 布)
    		
    		int cCount = 0;//电脑计数器
    		int pCount = 0;// 玩家计数器
    		
    		for(int i == 1; i <= 3; ) {
    			
    		int computer = ((int)(Math.random() * 10)) % 3 + 1 ;
    		
    		System.out.println( ("请输入猜拳的编号:");
    		
    		int player = input.nextInt();
    		
    	
    		// 比较
    		if(computer == player) {
    			
    			System.out.println("平局");
    			continue;
    			
    		}else if((player == 1 && computer == 3) || (player == 2 && computer == 1) || (player == 3 && computer == 2)) {
    			System.out.println(you win");
    			pCount++;
    		}else {
    				System.out.println("you failure");
    				ccount++;
    			}
    		if(cCount == 2 || pCount == 2) {
    			break;
    		}
    		i++;
    		}
    	}
    }
    
  12. 嵌套循环

    概念:在一个完整的循环结构中,嵌套另一个完整的循环结构

    public class TestNestFor {
        public static void main(String[] args) {
            for(int i = 1;i <= 3;i++) {//外层控制循环次数
                for(int j = 1;j <= 5; j++) {//内层控制单次循环次数
                    //计算一个班5名学生的平均成绩
                }
            }
        }
    }
    

    嵌套循环练习如下:

    import java.util.Scanner;
    
    public class TestNestedForGet {
    	public static void main(String[] args) {
        // 现有三个班级的5名学生,请通过控制台输入5名学生的分数,求平均数
    		Scanner input = new Scanner(System.in);
    		
    		// 将内部代码反复执行3遍
    		for(int i = 1;i <= 3; i++) {
    		double sum = 0D;
    		
    		for(int j = 1 ; j <= 5 ; j++){
    			
    			System.out.println("请输入第" + j + "学生的成绩:");
    			double score = input.nextDouble();
    			sum += score;
    		}
    		double avg = sum / 5;
    		System.out.println(avg);
    		}
    	}
    }
    
  13. 课堂案例

    打印直角三角形

    打印等腰三角形

  14. 总结

    1. 循环的概念:通过某个条件,重复的执行一段逻辑代码
    2. while循环:while() {}
    3. do while循环:do {} while();
    4. for循环:for(初始;条件;迭代) {操作;}
    5. 流程控制关键字:break,continue
    6. 嵌套循环:在一个完整的循环结构中,嵌套另一个完整的循环结构
  15. 课后作业

猜你喜欢

转载自blog.csdn.net/zhu_fangyuan/article/details/106845950