ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 大数据学习笔记第4天-流程控制 # ## 回顾 ## 作用 ## 大纲 - Switch结构 - 循环结构 - for循环 - while循环 - do...while循环 - 循环嵌套 - 2个案例:猜数字、循环输入成绩进行判断 ## 第一节课 ## - 回顾、作业 - Switch结构 - Switch练习 ## 第二节课 ## - for循环 - for循环练习 ## 第三节课 ## - while循环 - do...while循环 - 循环嵌套 ## 第四节课 ## - 案例:循环嵌套之九九乘法表 - 案例:猜数字 - 案例:循环输入成绩进行判断 ## 分支结构:switch switch(表达式或变量){ case 取值1: 语句体1; break; case 取值2: 语句体2; break; ... default: 语句体n+1; break; } ![](./img/04/01.jpg) ### switch注意事项: - switch语句表达式的类型有:byte,short,int,char,String(1.7之后才支持)和枚举类型; - case之间与default没有顺序,case相当于入口点,没有匹配的case将执行default,default也不是必须的; - 结束switch语句的情况:遇到break或执行到switch语句结束; - 如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾; ## 循环结构:概述 循环语句可以在满足循环条件的情况下,反复执行某一段代码;被反复执行的代码称为循环体;需要在适当的时候,把循环条件改为假,从而结束循环,否则循环将一直执行下去,形成死循环; 完整的循环应该包含以下四个部分: - 初始化语句:初始化工作,在循环体开始之前执行; - 循环条件:一个boolean表达式,决定是否执行循环体; - 循环体:反复执行的部分; - 迭代语句:在循环体执行完之后执行,然后再去判断循环条件,一般用来控制循环条件中的变量,使循环在合适的时候结束; ## 循环结构:for 格式: for(初始化表达式;条件表达式;循环变量控制语句){ 循环体语句; } 格式说明:for运行的顺序 1. 执行初始化表达式,只执行一次,通常是定义循环变量语句; 2. 判断循环条件,为真就往下执行,为假就结束循环; 3. 执行循环体语句; 4. 执行循环变量控制语句,一般是循环变量的自增或自减; 5. 回到第2步,重复这个过程,直到为假时结束; ## 10个练习题 1. 在控制台上依次打印1-10; 2. 在控制台上依次打印10-1; 3. 求1-10所有数之和; 4. 求出1-100之间的所有偶数之和; 5. 求出1-100之间的所有奇数之和; 6. 求出5的阶乘; 7. 求水仙花数; 8. 列出5位数中的回文数; 9. 统计1000以内,同时是3,5,7的倍数的数有多少个? 10. 在1-100之间,若是3的倍数,则在它之后输出中文“三”,若是5的倍数,则在它之后输出中文“五”,若是7的倍数,则在它之后输出中文“七” 答案: 01题: public class Demo01{ public static void main(String[] args){ for(int i=1;i<=10;i++){ System.out.println(i); } } } 02题: public class Demo02{ public static void main(String[] args){ for(int i=10;i>0;i--){ System.out.println(i); } } } 03题: public class Demo03{ public static void main(String[] args){ int sum = 0; for(int i=1;i<=10;i++){ sum += i; } System.out.println("求1-10所有数之和:" + sum); } } 04题: public class Demo04{ public static void main(String[] args){ int sum = 0; for(int i=1; i<=100; i++){ if(i%2==0){ sum += i; } } System.out.println("求出1-100之间的所有偶数之和:" + sum); } } 05题: public class Demo05{ public static void main(String[] args){ int sum = 0; for(int i=1; i<=100; i++){ if(i%2==1){ sum += i; } } System.out.println("求出1-100之间的所有奇数之和:"+sum); //2500 } } 06题: /* 求出5的阶乘; 公式:n!=n*(n-1)! 阶乘的计算方法 阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。 */ public class Demo06{ public static void main(String[] args){ int res = 1; for(int i=1; i<=5; i++){ res = res * i; } System.out.println("5的阶乘:" + res); } } 07题: /* 求水仙花数; 所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。 */ public class Demo07{ public static void main(String[] args){ for(int i=100; i<1000; i++){ int ge = i%10; // 个位数 int shi = i/10%10; // 十位数 int bai = i/100; // 百位数 if(ge*ge*ge+shi*shi*shi+bai*bai*bai==i){ System.out.println(i); } } } } 08题: /* 列出5位数中的回文数 回文数的概念:即是给定一个数,这个数顺读和逆读都是一样的。例如:121,1221... */ public class Demo08{ public static void main(String[] args){ int count = 0; for(int i=10000; i<100000; i++){ // 个十百千万 int ge = i%10; // 12345 int shi = i%100/10; int qian = i%10000/1000; int wan = i/10000; if(ge==wan && shi==qian){ count++; System.out.println(i); } } System.out.println("5位数中一共有"+count+"个回文数"); // 900 } } 09题: /* 统计1000以内,同时是3,5,7的倍数的数有多少个? */ public class Demo09{ public static void main(String[] args){ int count = 0; for (int i=0; i<1000; i++){ if(i%3==0 && i%5==0 && i%7==0){ System.out.println(i); count++; } } System.out.println("统计1000以内,同时是3,5,7的倍数的数有多少个?" + count); } } 10题: /* 在1-100之间,若是3的倍数,则在它之后输出中文“三”,若是5的倍数,则在它之后输出中文“五”,若是7的倍数,则在它之后输出中文“七” */ public class Demo10{ public static void main(String[] args){ for(int i=1; i<=100; i++){ System.out.print(i); if(i%3==0){ System.out.print("三"); }else if(i%5==0){ System.out.print("五"); }else if(i%7==0){ System.out.print("七"); } System.out.println(); } } } ## 循环结构:while while语句格式: [初始化部分] while(条件表达式){ 循环体语句; [循环变量控制语句] } 执行流程: 1. 执行初始化语句(如果有的话); 2. 判断条件表达式真假;如果真,往下执行;如果假,结束循环; 3. 执行循环体语句; 4. 执行循环变量控制语句(如果有的话); 5. 返回第2步,重复执行,直到条件为假,结束循环; ### 循环变量的使用问题: for循环的循环变量,一般情况下在循环外是不能访问到的,因为它的作用域是在for循环的{}之内,但是可以通过把循环变量定义在循环之外来实现这个功能;或者定义计数器; for(int i=0;i<10;i++){ ... } System.out.println(i); //error int i=0; for(;i<10;i++){ ... } System.out.println(i); //ok while循环本身就是把循环变量定义在循环之外,所以没有这个问题; int i=0; while(i<10){ ... i++; } System.out.println(i); ### for 和 while 的使用场景 1. 当明确知道循环的范围的时候,通常使用for; 2. 当不明确循环次数的时候,for和while都可以,通常使用while; ### 案例: 已知珠穆朗玛峰的高度是8848米,假设有一张足够大的纸,厚度是0.01米,请问:这张纸折叠多少次可以保证厚度不低于珠穆朗玛峰的高度? 答案: public class ZhuMuLangMa2{ public static void main(String[] args){ double h=0.01; double all_height = h; int count=0; while(all_height<=8848){ all_height *= 2; count++; } System.out.println("需要折叠的次数是:"+count); } } 另外一种方法: public class ZhuMuLangMa{ public static void main(String[] args){ double h=0.01; double all_height = h; int count=0; while(true){ all_height *= 2; count++; if(all_height>8848){ break; } } System.out.println("需要折叠的次数是:"+count); } } ## 循环结构:do-while do while语句格式: [初始化部分] do{ 循环体语句; [循环变量控制语句] }while(条件表达式); ![](./img/04/02.jpg) 执行流程: 1. 执行初始化部分(如果有) 2. 执行循环体语句 3. 执行循环变量控制语句(如果有) 4. 判断条件表达式,如果为真,返回第2步;如果为假,结束循环 特点:循环体至少被执行1次; ### 三种循环的比较和死循环 - while和for可以互换; - do-while循环的循环体语句至少执行一次; - 优先选择使用for循环; - 死循环:条件表达式永远为true; ## 循环的嵌套 外层循环表达式为真时,进入内层循环条件的判断,内层循环结束时,跳到外层循环继续判断外层循环的条件; ![](./img/04/03.jpg) 代码实例: public class QianTao{ public static void main(String[] args){ for(int i=0; i<5; i++){ //外层循环 for(int j=0; j<5; j++){ //内层循环 System.out.println(i+"*"+j); } System.out.println("-------"); } } } ![](./img/04/04.png) ### 案例 循环嵌套打印正三角形、倒三角形; 代码: /* 打印三角形:第n行打印n次星号 */ import java.util.Scanner; public class SanJiaoXing{ public static void main(String[] args){ Scanner s = new Scanner(System.in); System.out.println("请输入一个数字,表示三角形的行数:"); int num = s.nextInt(); for(int i=1; i<=num; i++){ for(int j=i; j>0; j--){ System.out.print("*"); } System.out.println(); } } } ![](./img/04/05.png) 备注:可以试试输出一个倒三角形。