循环结构

1. 局部变量

局部变量 描述
赋值 必须先赋值才能使用
定义位置 定义在方法体内部
作用范围 离当前变量最近的大括号以内
重名 重合的作用范围不能重名
生命周期 随着方法的入栈(压栈)而生效 随着方法的出栈(弹栈)而死亡
存储位置 基本数据类型:变量和值 都存储在栈中 ;引用数据类型:栈中存放变量名(引用) 堆中存方法值

2. 堆(heap)和栈(stack)

栈 先进后出 FILO first in last out 堆 先进先出 FIFO first in first out

3. 循环

3.1 while循环

while:当 …… 循环必要条件: 1.计数器初始化 2.判断条件 3.循环体 4.计数器(迭代器)变化 while循环特点: while循环可以处理循环次数确定的情况 ,更擅长处理循环次数不确定的情况 如果条件不成立 一次都不会执行

  1. package com.qfedu.test2;
  2. /**
  3. * 使用之前的方式编写100句System.out.print() 打印非常不合适
  4. * 代码不具备 可维护性 可扩展性
  5. * 解决方案:使用循环来实现
  6. *
  7. * 循环必要条件:
  8. * 1.计数器初始化
  9. * 2.判断条件
  10. * 3.循环体
  11. * 4.计数器(迭代器)变化
  12. * @author WHD
  13. *
  14. */
  15. public class Test2 {
  16. public static void main(String[] args) {
  17. int i = 1; // 1.计数器初始化
  18. while(i <= 100) { // 2.条件判断
  19. System.out.println("第" + i + "遍打印好好学习" ); // 3.循环体
  20. i++;// 4.计数器变化
  21. }
  22. System.out.println("程序结束");
  23. }
  24. }
  1. package com.qfedu.test3;
  2. import java.util.Scanner;
  3. /**
  4. * 老师每天检查赵四的学习任务是否合格,如果不合格,则继续进行。
  5. * 老师给赵四安排的每天的学习任务为:
  6. * 上午阅读教材,学习理论部分,
  7. * 下午上机编程,掌握代码部分
  8. *
  9. * while循环可以处理循环次数确定的情况
  10. * 更擅长处理循环次数不确定的情况
  11. * 如果条件不成立 一次都不会执行
  12. * @author WHD
  13. *
  14. */
  15. public class Test1 {
  16. public static void main(String[] args) {
  17. Scanner input = new Scanner(System.in);
  18. System.out.println("请输入您的学习任务是否合格?y/n");
  19. String answer = input.next();
  20. while(answer.equals("n")) {
  21. System.out.println("上午阅读教材");
  22. System.out.println("下午敲代码");
  23. System.out.println("请输入您的学习任务是否合格?y/n");
  24. answer = input.next();
  25. }
  26. // if(answer.equals("n")) {
  27. // System.out.println("上午阅读教材");
  28. // System.out.println("下午敲代码");
  29. // }else {
  30. // System.out.println("恭喜完成");
  31. // }
  32. System.out.println("恭喜完成");
  33. System.out.println("程序结束");
  34. }
  35. }

3.2 do-while

先执行 后判断 不管条件是否成立 至少执行一次 while和do-while的区别? while 先判断后执行 如果条件不成立 一次都不执行 do-while 先执行 后判断 不管条件是否成立 至少执行一次 do-while更擅长处理循环次数不确定的情况

  1. package com.qfedu.test3;
  2. import java.util.Scanner;
  3. /**
  4. * do-while 先执行 后判断 不管条件是否成立 至少执行一次
  5. * 经过几天的学习,老师给赵四一道测试题,
  6. * 让他先上机编写程序完成,然后老师检查是否合格。
  7. * 如果不合格,则继续编写……
  8. * @author WHD
  9. *
  10. */
  11. public class Test2 {
  12. public static void main(String[] args) {
  13. Scanner input = new Scanner(System.in);
  14. String answer = "";
  15. do {
  16. System.out.println("编写代码上机测试……");
  17. System.out.println("请输入测试是否合格?y/n");
  18. answer = input.next();
  19. }while(answer.equals("n"));
  20. // if(answer.equals("n")) {
  21. // System.out.println("继续编写代码");
  22. // }else {
  23. // System.out.println("恭喜完成");
  24. // }
  25. System.out.println("恭喜完成");
  26. System.out.println("程序结束");
  27. }
  28. }
  1. package com.qfedu.test3;
  2. /**
  3. * 使用do-while实现N遍好好学习
  4. *
  5. */
  6. public class Test3 {
  7. public static void main(String[] args) {
  8. int i = 1;
  9. do {
  10. System.out.println("第"+ i +"遍好好学习");
  11. i++;
  12. }while(i <= 100);
  13. }
  14. }

3.3 for循环

for 为了…… 做 只能用于处理循环次数确定的情况 ,书写比while或者do-while更加简洁 for循环执行顺序 第一轮: 1.计数器初始化 并且只执行一次 2.条件判断 3.循环体 4.计数器变化 第二轮: 直接从判断条件开始继续执行

  1. package com.qfedu.test4;
  2. import java.util.Scanner;
  3. /**
  4. * 循环输入某同学结业考试的5门课成绩,并计算平均分
  5. * @author WHD
  6. *
  7. */
  8. public class Test2 {
  9. public static void main(String[] args) {
  10. Scanner input = new Scanner(System.in);
  11. double sum = 0; // 定义一个变量用于计算总分
  12. for(int i = 1;i <= 5;i++) {
  13. System.out.println("请输入第"+ i +"门成绩");
  14. double score = input.nextDouble(); // 每次接收并且存储到score中
  15. sum += score; // 每次将score累计到sum中
  16. }
  17. System.out.println("平均分是" + sum / 5);
  18. }
  19. }
  1. package com.qfedu.test5;
  2. import java.util.Scanner;
  3. /**
  4. * 根据用户输入的数字打印加法表
  5. * @author WHD
  6. *
  7. */
  8. public class Test1 {
  9. public static void main(String[] args) {
  10. Scanner input = new Scanner(System.in);
  11. System.out.println("请输入一个数字");
  12. int num = input.nextInt();
  13. for(int i = 0 ;i <= num;i++) {
  14. System.out.println(i + "+" + (num - i) + "=" + num);
  15. }
  16. }
  17. }

4. break关键字

使用break中断循环 模拟跑步停止 break 适用场景: switch 表示跳出switch结构 循环 表示中断当前循环 没有执行完的次数 不再执行

  1. package com.qfedu.test6;
  2. /**
  3. * 使用break中断循环 模拟跑步停止
  4. * break
  5. * 适用场景:
  6. * switch 表示跳出switch结构
  7. * 循环 表示中断当前循环 没有执行完的次数 不再执行
  8. * @author WHD
  9. *
  10. */
  11. public class Test1 {
  12. public static void main(String[] args) {
  13. for(int i = 1;i <= 10;i++) {
  14. System.out.println("跑步第"+ i +"圈");
  15. if(i == 8) {
  16. System.out.println("太累了,退出比赛");
  17. break;
  18. }
  19. }
  20. System.out.println("程序结束");
  21. }
  22. }
  1. package com.qfedu.test6;
  2. import java.util.Scanner;
  3. /**
  4. * 循环录入某学生5门课的成绩并计算平均分,
  5. * 如果某分数录入为负,停止录入并提示录入错误
  6. * @author WHD
  7. *
  8. */
  9. public class Test2 {
  10. public static void main(String[] args) {
  11. Scanner input = new Scanner(System.in);
  12. for(int i = 1;i <= 5;i++) {
  13. System.out.println("请输入第"+ i +"门成绩");
  14. int score = input.nextInt();
  15. if(score < 0) {
  16. System.out.println("分数录入不正确!");
  17. break;
  18. }
  19. }
  20. System.out.println("程序结束");
  21. }
  22. }

5. continue关键字

continue 继续 只能用于循环中 表示跳出本次循环 继续执行下一次循环 统计分数大于8O的学生人数占比 break和continue区别 应用场景区别: 1.break可以用于switch或者循环 continue只能用于循环 2.break在循环中表示中断循环 没有执行完的次数不再执行 continue表示跳出本次循环 继续执行下一次

  1. package com.qfedu.test7;
  2. import java.util.Scanner;
  3. /**
  4. * continue 继续
  5. * 只能用于循环中 表示跳出本次循环 继续执行下一次循环
  6. * 统计分数大于80的学生人数占比
  7. *
  8. *
  9. * break和continue区别
  10. * 应用场景区别:
  11. * 1.break可以用于switch或者循环 continue只能用于循环
  12. * 2.break在循环中表示中断循环 没有执行完的次数不再执行 continue表示跳出本次循环 继续执行下一次
  13. * @author WHD
  14. *
  15. */
  16. public class Test2 {
  17. public static void main(String[] args) {
  18. Scanner input = new Scanner(System.in);
  19. System.out.println("请输入有几个人");
  20. int num = input.nextInt();
  21. double count = 0;
  22. for(int i =1;i <= num;i++) {
  23. System.out.println("请输入第"+ i +"个人的成绩");
  24. int score = input.nextInt();
  25. if(score < 80) {
  26. continue;
  27. }
  28. count ++;
  29. }
  30. System.out.println(count / num * 100 + "%");
  31. }
  32. }
  1. package com.qfedu.test7;
  2. /**
  3. * 求1~10之间的所有偶数和
  4. * @author WHD
  5. *
  6. */
  7. public class Test3 {
  8. public static void main(String[] args) {
  9. int sum = 0;
  10. for(int i = 1;i <= 10;i++) {
  11. if(i % 2 != 0) {
  12. continue;
  13. }
  14. sum += i;
  15. }
  16. System.out.println(sum);
  17. int sum1 = 0;
  18. int i = 1;
  19. while(i <= 10) {
  20. i++;
  21. if(i % 2 != 0) {
  22. continue;
  23. }
  24. sum1 += i;
  25. }
  26. System.out.println(sum1);
  27. int sum2 = 0;
  28. int j = 1;
  29. do {
  30. j++;
  31. if(j % 2 != 0) {
  32. continue;
  33. }
  34. sum2 += j;
  35. }while(j <= 10);
  36. System.out.println(sum2);
  37. }
  38. }

6. debug调试

image.png