循环结构
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循环可以处理循环次数确定的情况 ,更擅长处理循环次数不确定的情况 如果条件不成立 一次都不会执行
package com.qfedu.test2;/*** 使用之前的方式编写100句System.out.print() 打印非常不合适* 代码不具备 可维护性 可扩展性* 解决方案:使用循环来实现** 循环必要条件:* 1.计数器初始化* 2.判断条件* 3.循环体* 4.计数器(迭代器)变化* @author WHD**/public class Test2 {public static void main(String[] args) {int i = 1; // 1.计数器初始化while(i <= 100) { // 2.条件判断System.out.println("第" + i + "遍打印好好学习" ); // 3.循环体i++;// 4.计数器变化}System.out.println("程序结束");}}
package com.qfedu.test3;import java.util.Scanner;/*** 老师每天检查赵四的学习任务是否合格,如果不合格,则继续进行。* 老师给赵四安排的每天的学习任务为:* 上午阅读教材,学习理论部分,* 下午上机编程,掌握代码部分** while循环可以处理循环次数确定的情况* 更擅长处理循环次数不确定的情况* 如果条件不成立 一次都不会执行* @author WHD**/public class Test1 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入您的学习任务是否合格?y/n");String answer = input.next();while(answer.equals("n")) {System.out.println("上午阅读教材");System.out.println("下午敲代码");System.out.println("请输入您的学习任务是否合格?y/n");answer = input.next();}// if(answer.equals("n")) {// System.out.println("上午阅读教材");// System.out.println("下午敲代码");// }else {// System.out.println("恭喜完成");// }System.out.println("恭喜完成");System.out.println("程序结束");}}
3.2 do-while
先执行 后判断 不管条件是否成立 至少执行一次 while和do-while的区别? while 先判断后执行 如果条件不成立 一次都不执行 do-while 先执行 后判断 不管条件是否成立 至少执行一次 do-while更擅长处理循环次数不确定的情况
package com.qfedu.test3;import java.util.Scanner;/*** do-while 先执行 后判断 不管条件是否成立 至少执行一次* 经过几天的学习,老师给赵四一道测试题,* 让他先上机编写程序完成,然后老师检查是否合格。* 如果不合格,则继续编写……* @author WHD**/public class Test2 {public static void main(String[] args) {Scanner input = new Scanner(System.in);String answer = "";do {System.out.println("编写代码上机测试……");System.out.println("请输入测试是否合格?y/n");answer = input.next();}while(answer.equals("n"));// if(answer.equals("n")) {// System.out.println("继续编写代码");// }else {// System.out.println("恭喜完成");// }System.out.println("恭喜完成");System.out.println("程序结束");}}
package com.qfedu.test3;/*** 使用do-while实现N遍好好学习**/public class Test3 {public static void main(String[] args) {int i = 1;do {System.out.println("第"+ i +"遍好好学习");i++;}while(i <= 100);}}
3.3 for循环
for 为了…… 做 只能用于处理循环次数确定的情况 ,书写比while或者do-while更加简洁 for循环执行顺序 第一轮: 1.计数器初始化 并且只执行一次 2.条件判断 3.循环体 4.计数器变化 第二轮: 直接从判断条件开始继续执行
package com.qfedu.test4;import java.util.Scanner;/*** 循环输入某同学结业考试的5门课成绩,并计算平均分* @author WHD**/public class Test2 {public static void main(String[] args) {Scanner input = new Scanner(System.in);double sum = 0; // 定义一个变量用于计算总分for(int i = 1;i <= 5;i++) {System.out.println("请输入第"+ i +"门成绩");double score = input.nextDouble(); // 每次接收并且存储到score中sum += score; // 每次将score累计到sum中}System.out.println("平均分是" + sum / 5);}}
package com.qfedu.test5;import java.util.Scanner;/*** 根据用户输入的数字打印加法表* @author WHD**/public class Test1 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入一个数字");int num = input.nextInt();for(int i = 0 ;i <= num;i++) {System.out.println(i + "+" + (num - i) + "=" + num);}}}
4. break关键字
使用break中断循环 模拟跑步停止 break 适用场景: switch 表示跳出switch结构 循环 表示中断当前循环 没有执行完的次数 不再执行
package com.qfedu.test6;/*** 使用break中断循环 模拟跑步停止* break* 适用场景:* switch 表示跳出switch结构* 循环 表示中断当前循环 没有执行完的次数 不再执行* @author WHD**/public class Test1 {public static void main(String[] args) {for(int i = 1;i <= 10;i++) {System.out.println("跑步第"+ i +"圈");if(i == 8) {System.out.println("太累了,退出比赛");break;}}System.out.println("程序结束");}}
package com.qfedu.test6;import java.util.Scanner;/*** 循环录入某学生5门课的成绩并计算平均分,* 如果某分数录入为负,停止录入并提示录入错误* @author WHD**/public class Test2 {public static void main(String[] args) {Scanner input = new Scanner(System.in);for(int i = 1;i <= 5;i++) {System.out.println("请输入第"+ i +"门成绩");int score = input.nextInt();if(score < 0) {System.out.println("分数录入不正确!");break;}}System.out.println("程序结束");}}
5. continue关键字
continue 继续 只能用于循环中 表示跳出本次循环 继续执行下一次循环 统计分数大于8O的学生人数占比 break和continue区别 应用场景区别: 1.break可以用于switch或者循环 continue只能用于循环 2.break在循环中表示中断循环 没有执行完的次数不再执行 continue表示跳出本次循环 继续执行下一次
package com.qfedu.test7;import java.util.Scanner;/*** continue 继续* 只能用于循环中 表示跳出本次循环 继续执行下一次循环* 统计分数大于80的学生人数占比*** break和continue区别* 应用场景区别:* 1.break可以用于switch或者循环 continue只能用于循环* 2.break在循环中表示中断循环 没有执行完的次数不再执行 continue表示跳出本次循环 继续执行下一次* @author WHD**/public class Test2 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入有几个人");int num = input.nextInt();double count = 0;for(int i =1;i <= num;i++) {System.out.println("请输入第"+ i +"个人的成绩");int score = input.nextInt();if(score < 80) {continue;}count ++;}System.out.println(count / num * 100 + "%");}}
package com.qfedu.test7;/*** 求1~10之间的所有偶数和* @author WHD**/public class Test3 {public static void main(String[] args) {int sum = 0;for(int i = 1;i <= 10;i++) {if(i % 2 != 0) {continue;}sum += i;}System.out.println(sum);int sum1 = 0;int i = 1;while(i <= 10) {i++;if(i % 2 != 0) {continue;}sum1 += i;}System.out.println(sum1);int sum2 = 0;int j = 1;do {j++;if(j % 2 != 0) {continue;}sum2 += j;}while(j <= 10);System.out.println(sum2);}}
6. debug调试

