文档版本 | 开发工具 | 测试平台 | 工程名字 | 日期 | 作者 | 备注 |
---|---|---|---|---|---|---|
V1.0 | 2016.02.23 | lutianfei | none |
选择结构(switch语句)
- switch语句格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
break; //可以省略
}
格式解释
- switch表示这是switch语句
- 表达式的取值:
byte
,short
,int
,char
- JDK**5**以后可以是
枚举
- JDK**7**以后可以是
String
- 表达式的取值:
- case后面跟的是要和表达式进行比较的值
语句体
部分可以是一条或多条语句- break表示中断,结束的意思,可以结束switch语句
- default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
- switch表示这是switch语句
执行流程
- 首先计算出表达式的值
- 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
- 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
注意事项
- case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
- default可以省略吗?
- 可以省略。一般不建议因为其作用是对不正确的情况给出提示。除非判断的值是固定的。(单选题)
- break可以省略吗?
- 可以省略,一般不建议。否则结果可能不是你想要的
- default的位置一定要在最后吗?
- 可以出现在switch语句任意位置。
- switch语句的结束条件
- 遇到break
- 执行到程序的末尾
经典面试题:
int x = 2;
int y = 3;
switch(x){
default:
y++;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y);
- 分析:
- 先跳转到default : y = 4
- 再跳转到case 3: y = 5
- 再跳转到case 4: y = 6
- 已执行到swith尾部,跳出 所以y = 6
补充知识点:键盘字符串输入
String s = sc.nextLine();
if和switch应用场景区分:
- if语句使用场景:
- 针对结果是boolean类型的判断
- 针对一个范围的判断
- 针对几个常量值的判断
- switch语句使用场景:
- 针对几个常量值的判断
- if语句使用场景:
循环结构
- 循环语句的组成
- 初始化语句:
- 一条或者多条语句,这些语句完成一些初始化操作。
- 判断条件语句:
- 这是一个boolean 表达式,这个表达式能决定是否执行循环体。
- 循环体语句:
- 这个部分是循环体语句,也就是我们要多次做的事情。
- 控制条件语句:
- 这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。
- 初始化语句:
for结构循环
- for循环语句格式:
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
- 执行流程
- A:执行初始化语句
- B:执行判断条件语句,看其结果是true还是false
- 如果是false,循环结束。
- 如果是true,继续执行。
- C:执行循环体语句
- D:执行控制条件语句
- E:回到B继续
典型应用
- 1~100间数据之和
for(int x=1;x<=100;x++){
sum +=x;
}
- 1~100间偶数和
//方式1
for(int x=1;x<=100;x++){
if(x%2 == 0){
sum +=x;
}
//方式2
for(int x=0;x<100;x+=2){
sum +=x;
}
}
* 求5的阶乘
int jc=1;
for(int x=1;x<=5;x++){
jc*=x;
}
- 在控制台输出所有的“水仙花数”(其各位数字的立方和等于该数本身,eg:153 = 1*1*1 + 5*5*5 +3*3*3)
class ForDemo{
public static void main(String[] args){
for(int x=100;x<1000;x++){
int ge = x%10;
int shi= x/10%10;
int bai= x/10/10%10;
if(x ==(ge*ge*ge + shi*shi*shi + bai*bai*bai)){
System.out.println("shuixianhua:"+x);
}
}
}
}
while循环语句
- while循环语句格式:
- 基本格式
while(判断条件语句) {
循环体语句;
}
* 扩展格式
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
- for循环语句和while循环语句可以等价转换,但还是有些小区别的
- 使用区别:控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
- 场景区别:
- for循环适合针对一个范围判断进行操作
- while循环适合判断次数不明确操作
do…while循环语句
- 基本格式
do {
循环体语句;
}while((判断条件语句);
- 扩展格式
初始化语句;
do {
循环体语句;
控制条件语句;
} while((判断条件语句);
- 练习题:99乘法表:
class ForTest{
public static void main(String[] args){
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"=" +i*j+";\t");
}
System.out.println();
}
}
}
- 注:
\t
:Tab键\r
:回车\n
:换行
跳转控制语句
Java中的goto是保留字,目前不能使用。虽然没有goto语句可以增强程序的安全性,但是也带来很多不便,比如说,我想在某个循环知道到某一步的时候就结束,现在就做不了这件事情。为了弥补这个缺陷,Java就提供了break,continue和return来实现控制语句的跳转和中断。
break 中断
- continue 继续
return 返回
break的使用场景:
- 在选择结构switch语句中
- 在循环语句中
break的作用:
- 跳出单层循环
- 跳出多层循环
- 带标签的跳出
- 格式:
标签名: 循环语句
标签名
要符合Java的命名规则
Eg:跳出多层循环
wc:for(int x=0;x<3;x++){
nc:for(int y=0;y<4;y++){
if(y==2){
break wc; //跳出外出循环。
}
}
}
- continue的使用场景:
- 在
循环语句
中 - 离开使用场景的存在是没有意义的
- 在
continue的作用:
- 单层循环对比break,然后总结两个的区别
- break 退出当前循环
- continue 退出本次循环,进入下一次执行。
- 单层循环对比break,然后总结两个的区别
Eg:
class ContinueDemo{
public static void main(String[] args){
for(int x=0;x<10;x++){
if(x==3){
//break;
continue;
}
System.out.println(x);
}
}
}
//当使用break时,输出结果:0,1,2
//当使用continue时,输出结果0,1,2,4,5,6,7,8,9
return 使用场景
- return关键字不是为了跳转出循环体,而是为了结束一个方法,也就是退出一个方法。跳转到上层调用的方法。
Eg:
class ReturnDemo{
public static void main(String[] args){
for(int x=0;x<10;x++){
if(x==2){
System.out.println("Exit");
//break;
//continue;
return;
}
System.out.println(x);
}
System.out.println("Over");
}
}
//break结果:0,1,Exit,Over
//continue结果:0,1,Exit,3,4,5,6,7,8,9,Over
//return结果:0,1,退出(直接退出了main方法)