1:switch语句(掌握) (1)格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; … default: 语句体n+1; break; }
格式解释说明: switch:说明这是switch语句。 表达式:可以是byte,short,int,char JDK5以后可以是枚举 JDK7以后可以是字符串 case:后面的值就是要和表达式进行比较的值 break:表示程序到这里中断,跳出switch语句 default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else(2)面试题 switch语句的表达式可以是byte吗?可以是long吗?可以是String吗? 可以,不可以,JDK7以后可以(3)执行流程: A:首先计算表达式的值 B:和每一个case进行匹配,如果有就执行对应的语句体,看到break就结束。 C:如果没有匹配,就执行default的语句体n+1。(4)注意事项: A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的 B:default可以省略吗? 可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。 特殊情况: case就可以把值固定。 A,B,C,D C:break可以省略吗? 可以省略,但是结果可能不是我们想要的。 会出现一个现象:case穿透。 最终我们建议不要省略 D:default一定要在最后吗? 不是,可以在任意位置。但是建议在最后。 E:switch语句的结束条件 a:遇到break就结束了 b:执行到末尾就结束了(5)案例: A:键盘录入一个数字(1-7),输出对应的星期几。 B:单项选择题 C:键盘录入一个字符串的问题 String s = sc.nextLine(); D:根据给定的月份,输出对应的季节 /*用switch语句实现键盘录入月份,输出对应的季节分析: A:键盘录入一个月份,用Scanner实现 B:用switch语句实现即可if语句和switch语句的区别? if语句: A:针对结果是boolean类型的判断 B:针对一个范围的判断 C:针对几个常量值的判断 switch语句: 针对几个常量值的判断*/ import java.util.Scanner;
class SwitchTest4 { public static void main(String[] args) { //创建键盘录入对象 Scanner sc = new Scanner(System.in);
//录入数据 System.out.PRintln("请输入月份(1-12):"); int month = sc.nextInt(); //这样写太麻烦了,我们使用一个我们不想使用的东西:case穿透 switch(month) { case 1: case 2: case 12: System.out.println("冬季"); break; case 3: case 4: case 5: System.out.println("春季"); break; case 6: case 7: case 8: System.out.println("夏季"); break; case 9: case 10: case 11: System.out.println("秋季"); break; default: System.out.println("你输入的月份有误"); }}} (6)if语句和switch语句各自的场景 A:if 针对boolean类型的判断 针对一个范围的判断 针对几个常量的判断 B:switch 针对几个常量的判断
2:循环语句(掌握) (1)有三种:for,while,do…while (2)for循环语句 A:格式 for(初始化语句;判断条件语句;控制条件语句){ 循环体语句; }
执行流程: a:执行初始化语句 b:执行判断条件语句 如果这里是true,就继续 如果这里是false,循环就结束 c:执行循环体语句 d:执行控制条件语句 e:回到b B:注意事项 a:判断条件语句无论简单还是复杂,结果是boolean类型 b:循环体语句如果是一条,可以省略大括号,但是不建议 c:有分号就没有左大括号,有左大括号就没有分号 C:案例 a:输出10次HelloWorld b:输出1-10的数据 c:输出10-1的数据 d:求1-10的和 e:求1-100的和,求1-100的偶数和,求1-100的奇数和 /*需求: A:求1-100之和。 B:求出1-100之间偶数和 C:求出1-100之间奇数和(自己做)*/ class ForDemo4 { public static void main(String[] args) { //求1-100之和。 int sum1 = 0;
for(int x=1; x<=100; x++) { sum1 +=x; } System.out.println("1-100之和是:"+sum1); System.out.println("------------------"); //求出1-100之间偶数和 //方式1 int sum2 = 0; for(int x=1; x<=100; x++) { if(x%2 == 0) { sum2 += x; } } System.out.println("1-100偶数之和是:"+sum2); System.out.println("------------------"); //方式2 int sum3 = 0; for(int x=0; x<=100; x+=2) { sum3 += x; } System.out.println("1-100偶数之和是:"+sum3); System.out.println("------------------");}} f:求5的阶乘 g:在控制台打印水仙花数 h:统计水仙花个数 i:改进版的回文数 一个五位数 个位 = 万位 十位 = 千位 个位 + 十位 + 千位 + 万位 = 百位 j:统计1-1000之间同时满足如下条件的数据有多少个 x%3==2 x%5==3 x%7==2 /* 需求:请统计1-1000之间同时满足如下条件的数据有多少个: 对3整除余2 对5整除余3 对7整除余2
分析: A:定义统计变量,初始化值是0 B:1-1000之间是一个范围,用for很容易就可以实现。 C:每个数据要同时满足如下要求 x%3==2 x%5==3 x%7==2 D:如果满足条件,统计数据++即可,最后输出统计变量*/ class ForDemo9 { public static void main(String[] args) { //定义统计变量,初始化值是0 int count = 0;
//1-1000之间是一个范围,用for很容易就可以实现。 for(int x=1; x<=1000; x++) { /* 每个数据要同时满足如下要求 x%3==2 x%5==3 x%7==2 */ if(x%3==2 && x%5==3 && x%7==2) { count++; System.out.println(x); } } //输出数据 System.out.println("满足这样条件的数据共有:"+count+"个");}} (3)while循环 A:基本格式 while(判断条件语句) { 循环体语句; }
扩展格式: 初始化语句; while(判断条件语句){ 循环体语句; 控制条件语句; } 通过查看这个格式,我们就知道while循环可以和for循环等价转换。 B:while的练习 把for语句的练习用while改进 C:for和while的区别 a:使用上的区别 for语句的那个控制条件变量,在循环结束后不能在使用了。 而while的可以继续使用。 b:理解上的区别 for适合于一个范围的判断 while适合次数不明确的 举例:吃葡萄 D:案例: a:珠穆朗玛峰问题 b:小芳存钱问题(break以后才能做)(4)do...while循环 A:基本格式 do { 循环体语句; }while(判断条件语句); 扩展格式: 初始化语句; do { 循环体语句; 控制条件语句; }while(判断条件语句); 通过查看格式,我们就可以看出其实三种循环的格式可以是统一的。 B:三种循环的区别 a:do...while循环至少执行一次循环体 b:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体(5)循环使用的注意事项(死循环) A:一定要注意修改控制条件,否则容易出现死循环。 B:最简单的死循环格式 a:while(true){...} b:for(;;){}3:控制跳转语句(掌握) (1)break:中断的意思 A:用在循环和switch语句中,离开此应用场景无意义。 B:作用 a:跳出单层循环 b:跳出多层循环,需要标签语句的配合 (2)continue:继续 A:用在循环中,离开此应用场景无意义。 B:作用 a:跳出单层循环的一次,可以继续下一次 C:填空题 for(int x=1; x<=10; x++) { if(x%3 == 0) { //补齐代码 } System.out.println(“Java基础班”); } 如何让控制台输出2次:Java基础班 如何让控制台输出7次:Java基础班 如何让控制台输出13次:Java基础班 /* continue:继续
使用场景: 循环中。离开此场景无意义。测试,找到和break的区别: break:跳出单层循环 continue:跳出一次循环,进入下一次的执行练习题: for(int x=1; x<=10; x++) { if(x%3==0) { //在此处填写代码 } System.out.println(“Java基础班”); } 我想在控制台输出2次:“Java基础班“ break; 我想在控制台输出7次:“Java基础班“ continue; 我想在控制台输出13次:“Java基础班“ System.out.println(“Java基础班”);*/ class ContinueDemo { public static void main(String[] args) { for(int x=0; x<10; x++) { if(x == 3) { //break; continue; }
System.out.println(x); }}} (3)return:返回 A:用于结束方法的,后面还会在继续讲解和使用。 B:一旦遇到return,程序就不会在继续往后执行。
练习: 1./* 需求:在控制台输出九九乘法表。
首先我们写出九九乘法表: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 ... 1*9=9 2*9=18 3*9=27 ...我们先把这个九九乘法表看出是这样的一个形状: * ** *** **** ***** ****** ******* ******** *********注意: '/x' x表示任意,这种做法叫转移字符。 '/t' tab键的位置 '/r' 回车 '/n' 换行*/ class ForForDemo3 { public static void main(String[] args) { for(int x=0; x<9; x++) { for(int y=0; y<=x; y++) { System.out.print(“*”); } System.out.println(); } System.out.println(“————–”); //为了使用数据,我们从1开始 for(int x=1; x<=9; x++) { for(int y=1; y<=x; y++) { System.out.print(y+”*”+x+”=”+y*x+”/t”); } System.out.println(); } } } 2./* 需求:小芳的妈妈每天给她2.5元钱,她都会存起来,但是, 每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱, 请问,经过多少天,小芳才可以存到100元钱。
分析: A:小芳的妈妈每天给她2.5元钱 double dayMoney = 2.5; B:她都会存起来 double daySum = 0; C:从第一天开始存储 int dayCount = 1; D:经过多少天,小芳才可以存到100元钱。 double result = 100; E:这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱, 说明要判断dayCount的值,如果对5整除就减去6元钱。 daySum -= 6; 由此还隐含了一个问题,就是如果不是5的倍数天的话,钱要累加 daySum += dayMoney; F:因为不知道是多少天,所以我用死循环,一旦超过100元我就退出循环。*/ class WhileDemo { public static void main(String[] args) { //每天要存储的钱是2.5元 double dayMoney = 2.5;
//存钱的初始化值是0 double daySum = 0; //从第一天开始存储 int dayCount = 1; //最终存储不小于100就不存储了 int result = 100; //因为不知道是多少天,所以我用死循环, while(true) { //累加钱 daySum += dayMoney; //一旦超过100元我就退出循环。 if(daySum >= result) { System.out.println("共花了"+dayCount+"天存储了100元"); break; } if(dayCount%5 == 0) { //花去6元钱 daySum -= 6; System.out.println("第"+dayCount+"天花了6元钱"); } //天数变化 dayCount++; }}}
新闻热点
疑难解答