04.01 选择结构switch语句的格式及其解释
switch语句的格式:
switch(表达式)
{
case 值1:语句体1;break;
case 值2:语句体2;break;
......
default:语句体n+1;break;
}
格式解释:
switch表示这是switch语句
表达式的取值:byte,short,int,char,JDK5以后可以是枚举类型,JDK7以后可以是String类型
case后面跟的是要和表达式进行比较的值
语句体部分可以是一条或多条语句
break表示中断,结束的意思,可以结束switch语句
default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
04.02 选择结构switch语句的基本使用
switch语句执行流程:
首先计算出表达式的值
其次,和case后的值依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束。
流程图:
例:键盘录入1~7,对应输出星期一到星期日
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 Scanner sc = new Scanner(System.in); 7 System.out.println("请输入一个数:"); 8 int num = sc.nextInt(); 9 switch(num) 10 { 11 case 1: 12 System.out.println("星期一");break; 13 case 2: 14 System.out.println("星期二");break; 15 case 3: 16 System.out.println("星期三");break; 17 case 4: 18 System.out.println("星期四");break; 19 case 5: 20 System.out.println("星期五");break; 21 case 6: 22 System.out.println("星期六");break; 23 case 7: 24 System.out.println("星期日");break; 25 default: 26 System.out.println("数据输入错误"); 27 } 28 } 29 }
04.03 选择结构switch语句的注意事项
1.case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的。
2.default语句可以省略,一般不建议。除非判断的值是固定的。
3.break语句可以省略,一般不建议。因为得到的结果可能不是你想要的。
4.default语句可以出现在switch语句任意位置。
5.switch语句的结束条件遇到break或者执行到程序的末尾。
04.04 选择结构switch语句练习1看程序写结果
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int x = 2; 6 int y = 3; 7 switch(x) 8 { 9 default: 10 y++;break; 11 case 3: 12 y++; 13 case 4: 14 y++; 15 } 16 System.out.println("y="+y); //y=4 17 18 int a = 2; 19 int b = 3; 20 switch(a) 21 { 22 default: 23 b++; 24 case 3: 25 b++; 26 case 4: 27 b++; 28 } 29 System.out.println("b="+b); //b=6 30 } 31 }
04.05 选择结构switch语句练习2单项选择题
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 Scanner sc = new Scanner(System.in); 7 System.out.println("int类型占几个字节?"); 8 System.out.println("A.2个 B.4个 C.6个 D.8个"); 9 System.out.println("请输入答案:"); 10 //获取字符串的第一个字符 11 char ch = sc.nextLine().charAt(0); 12 switch(ch) 13 { 14 case 'A': 15 System.out.println("选择错误!");break; 16 case 'B': 17 System.out.println("选择正确!");break; 18 case 'C': 19 System.out.println("选择错误!");break; 20 case 'D': 21 System.out.println("选择错误!");break; 22 default: 23 System.out.println("没有该选项"); 24 } 25 } 26 }
运行结果:
int类型占几个字节? A.2个 B.4个 C.6个 D.8个 请输入答案: B 选择正确
04.06 选择结构switch语句练习3表达式是字符串
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 Scanner sc = new Scanner(System.in); 7 System.out.println("请输入要翻译的单词"); 8 System.out.println("hello world china develop"); 9 String str = sc.nextLine(); 10 switch(str) 11 { 12 case "hello": 13 System.out.println("你好");break; 14 case "world": 15 System.out.println("世界");break; 16 case "china": 17 System.out.println("中国");break; 18 case "develop": 19 System.out.println("开发");break; 20 default: 21 System.out.println("该单词暂时无法翻译"); 22 } 23 } 24 }
04.07 选择结构switch和if语句的各自使用场景
if语句使用场景:
针对结果是boolean类型的判断
针对一个范围的判断
针对几个常量值的判断
switch语句使用场景:
针对几个常量值的判断
04.08 循环结构循环语句概述
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。
循环语句的组成:
初始化语句:一条或者多条语句,这些语句完成一些初始化操作。
判断条件语句:这是一个boolean 表达式,这个表达式能决定是否执行循环体。
循环体语句:这个部分是循环体语句,也就是我们要多次做的事情。
控制条件语句:这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。
04.09 循环结构for语句的格式和基本使用
for循环语句格式:
for(初始化语句;判断条件语句;控制条件语句)
{
循环体语句;
}
执行流程:
A:执行初始化语句
B:执行判断条件语句,看其结果是true还是false。如果是false,循环结束。如果是true,继续执行。
C:执行循环体语句
D:执行控制条件语句
E:回到B继续
流程图:
例:在控制台输出10次helloworld
1 for(int i = 0;i < 10; i++) 2 { 3 System.out.println("helloworld"); 4 }
04.10 循环结构for语句的注意事项
注意事项
1.判断条件语句的结果是一个boolean类型
2.循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
3.一般来说:有左大括号就没有分号,有分号就没有左大括号
04.11 循环结构for语句的练习1获取数据
在控制台输出数据1-10
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 for(int i = 1;i <= 10; i++) 6 { 7 System.out.println(i); 8 } 9 } 10 }
04.12 循环结构for语句的练习2求和思想
求出1-10之间数据之和
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 //定义第一个加数 6 int sum = 0; 7 for(int i = 1;i <= 10; i++) 8 { 9 //sum = sum + i; 10 sum += i; 11 } 12 System.out.println("sum="+sum); 13 } 14 }
04.13 循环结构for语句的练习3偶数和
求出1-100之间偶数和
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 //定义第一个加数 6 int sum = 0; 7 for(int i = 1;i <= 100; i++) 8 { 9 //判断该数是否为偶数 10 if(i % 2 == 0) 11 { 12 sum += i; 13 } 14 } 15 System.out.println("sum="+sum); 16 } 17 }
04.14 循环结构for语句的练习4阶乘
求5的阶乘,即计算1*2*3*4*5的积
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int result = 1; 6 for(int i = 1;i <= 5; i++) 7 { 8 result *= i; 9 } 10 System.out.println("result="+result); 11 } 12 }
04.15 循环结构for语句的练习5水仙花
在控制台输出所有的水仙花数,水仙花数是一个三位数,各位数字的立方之和等于该数本身
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int count = 0; 6 for(int i = 100;i < 1000; i++) 7 { 8 //获取个位数 9 int ge = i % 10; 10 //获取十位数 11 int shi = i / 10 % 10; 12 //获取百位数 13 int bai = i / 100 % 10; 14 if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) 15 { 16 System.out.println(i+"满足条件"); 17 count++; 18 } 19 } 20 System.out.println("共找到"+count+"个数"); 21 } 22 }
运行结果:
153满足条件 370满足条件 371满足条件 407满足条件 共找到4个数
04.16 循环结构for语句的练习6回文数
在控制台输出所有的回文数并统计个数,回文数就是个位等于万位,十位等于千位,个位+十位+千位+万位=百位,一共5位数
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int count = 0; 6 for(int i = 10000;i < 100000; i++) 7 { 8 int ge = i % 10; 9 int shi = i / 10 % 10; 10 int bai = i / 100 % 10; 11 int qian = i / 1000 % 10; 12 int wan = i / 10000 % 10; 13 if(ge == wan && shi == qian && ge+shi+qian+wan == bai) 14 { 15 System.out.println(i+"满足条件"); 16 count++; 17 } 18 } 19 System.out.println("共找到"+count+"个数"); 20 } 21 }
04.17 循环结构for语句的练习7统计思想
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int count = 0; 6 for(int i = 100;i < 1000; i++) 7 { 8 int ge = i % 10; 9 int shi = i / 10 % 10; 10 int bai = i / 100 % 10; 11 if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) 12 { 13 count++; 14 } 15 } 16 System.out.println("共找到"+count+"个数"); 17 } 18 }
04.18 循环结构for语句的练习8同时取余问题
统计1~1000之间同时满足 对3整除余2 对5整除余3 对7整除余2 的所有数据并输出至控制台
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int count = 0; 6 for(int i = 1;i <= 1000; i++) 7 { 8 if(i % 3 == 2 && i % 5 == 3 && i % 7 == 2) 9 { 10 System.out.println(i+"满足条件"); 11 count++; 12 } 13 } 14 System.out.println("共找到"+count+"个数"); 15 } 16 }
04.19 循环结构while语句的格式和基本使用
while循环语句格式:
while(判断条件语句)
{
循环体语句;
}
扩展格式:
初始化语句;
while(判断条件语句)
{
循环体语句;
控制条件语句;
}
执行流程:先执行判断条件语句,如果是false,循环结束。如果是true,继续执行循环体语句。直到判断条件语句是false。
流程图:
例:
1 int i = 0; 2 while(i < 10) 3 { 4 System.out.println("hello"); 5 i++; 6 }
04.20 循环结构while语句的练习1求和思想
求1~100之和
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int sum = 0; 6 int i = 1; 7 while(i <= 100) 8 { 9 sum += i; 10 i++; 11 } 12 System.out.println("sum = "+sum); 13 } 14 }
04.21 循环结构while语句的练习2统计思想
统计水仙花数
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int count = 0; 6 int i = 100; 7 while(i <= 1000) 8 { 9 int ge = i % 10; 10 int shi = i / 10 % 10; 11 int bai = i / 100 % 10; 12 if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) 13 { 14 System.out.println(i); 15 count++; 16 } 17 i++; 18 } 19 System.out.println("count = "+count); 20 } 21 }
04.22 循环结构while语句和for语句的区别
使用区别:
控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
场景区别:
for循环适合针对一个范围判断进行操作
while循环适合判断次数不明确操作
04.23 循环结构while语句的练习珠穆朗玛峰
现在有一张足够大的纸张,厚度为:0.01m。请问,折叠多少次,就可以保证厚度不低于8848m?
由于次数不确定,使用while循环
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int count = 0; 6 float num = 0.01f; 7 while(num < 8848) 8 { 9 count++; 10 num *= 2; 11 System.out.println("第"+count+"次"+num+"m"); 12 } 13 System.out.println("共计"+count+"次"); 14 } 15 }
04.24 循环结构do...while语句的格式和基本使用
do...while循环语句格式:
基本格式:
do
{
循环体语句;
}
while
(判断条件语句);
扩展格式:
初始化语句;
do
{
循环体语句;
控制条件语句;
}
while(判断条件语句);
流程图:
例:
1 int i = 0; 2 do 3 { 4 System.out.println("hello"); 5 i++; 6 } 7 while (i < 5);
04.25 循环结构三种循环语句的区别
三种循环语句的区别:
1.do...while循环至少会执行一次循环体
2.for循环和while循环必须先判断条件是否成立,只有在条件成立的时候才会去执行循环体
注意事项:写程序优先考虑for循环,再考虑while循环,最后考虑do...while循环。
04.26 循环结构循环注意事项之死循环
两种简单的死循环
1.while(true){}
2.for(;;){}
04.27 循环结构循环嵌套输出4行5列的星星
输出一个4行5列的星星(*)图案,如下所示:
* * * * *
* * * * *
* * * * *
* * * * *
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 //外循环控制行数 6 for(int i = 0;i < 4;i++) 7 { 8 //内循环控制列数 9 for(int j = 0;j < 5;j++) 10 { 11 //打印一颗*,不带换行 12 System.out.print("* "); 13 } 14 //换行 15 System.out.println(); 16 } 17 } 18 }
04.28 循环结构循环嵌套输出正三角形
输出以下图形
*
* *
* * *
* * * *
* * * * *
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 for(int i = 0;i < 5;i++) 6 { 7 for(int j = 0;j <= i;j++) 8 { 9 System.out.print("* "); 10 } 11 System.out.println(); 12 } 13 } 14 }
04.29 循环结构九九乘法表
输出九九乘法表
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 for(int i = 1;i <= 9;i++) 6 { 7 for(int j = 1;j <= i;j++) 8 { 9 System.out.print(j+"*"+i+"="+(i*j)+" "); 10 } 11 System.out.println(); 12 } 13 } 14 }
'x':x表示任意,转义字符
' ':TAB键,制表符
' ':回车
' ':换行
04.30 控制跳转语句break语句
Java就提供了break,continue和return来实现控制语句的跳转和中断
break:中断
continue:继续
return:返回
break的使用场景:
1.在选择结构switch语句中 2.在循环语句中
离开使用场景的存在是没有意义的
break的作用:
1.跳出单层循环
2.跳出多层循环(带标签的跳出,格式: 标签名:循环语句,标签名要符合Java的命名规则)
例1:跳出单层循环
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 for(int i = 1;i <= 10;i++) 6 { 7 if(i == 3) 8 { 9 break; 10 } 11 System.out.println("hello"); 12 } 13 } 14 }
运行结果:
hello hello
例2:跳出多层循环
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 AA:for(int i = 0;i < 3;i++) 6 { 7 BB:for(int j = 0;j < 3;j++) 8 { 9 if(j == 2) 10 { 11 break AA;//跳出外循环 12 } 13 System.out.print("* "); 14 } 15 System.out.println(); 16 } 17 } 18 }
运行结果:
* *
04.31 控制跳转语句continue语句
continue的使用场景:在循环语句中,离开使用场景的存在是没有意义的
continue的作用:结束本次循环,继续下一次循环,也可以带标签使用
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 for(int i = 0;i < 6;i++) 6 { 7 if(i == 4) 8 { 9 continue; 10 } 11 System.out.print(i+" "); 12 } 13 } 14 }
运行结果:
0 1 2 3 5
04.32 控制跳转语句return语句
return关键字不是为了跳转出循环体,更常用的功能是结束一个方法,也就是退出一个方法。跳转到上层调用的方法。
04.33 while语句和break的结合使用小芳存钱
小芳的妈妈每天给她2.5元钱,她都会存起来,但是,每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,请问,经过多少天,小芳才可以存到100元钱?
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 //每天存的钱 6 double dayMoney = 2.5; 7 8 //存钱的初始化值是0 9 double daySum = 0; 10 11 //从第1天开始存 12 int dayCount = 1; 13 14 while(true) 15 { 16 daySum += dayMoney; 17 if(daySum >= 100) 18 { 19 System.out.println("共花了"+dayCount+"天"); 20 break; 21 } 22 if(dayCount % 5 == 0) 23 { 24 //花去6元钱 25 daySum -= 6; 26 } 27 dayCount++; 28 } 29 } 30 }