第二种选择结构
switch case
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体;
break;
...
default:
语句体n+1;
break;
}
表达式这里的值可以是 int short char byte String(JDK7以后) 枚举值
执行 值与表达式相同的语句体,default用于执行当所有值都不与表达式值相同时的情况,break用来终止switch 语句体
注意点:
case后面只能跟常量,不能是变量;case后面的唯一不可重复,不可以写两个case 后面的值是一样的;default可以出现在任意位置,比如可以穿插在case
中间;switch语句的结束条件:1.遇到break 2.整个switch语句体执行到最后一条了;case穿透:如果case或者default后面没有加上break的话,那么会继续
之后的语句,比如
case 值1:
语句1;
case 值2:
语句2;
default:
语句3;
case 值3:
语句4;
上面的语句中,如果因为满足条件执行任何一条语句的话,后面的都会继续执行
switch和if如何抉择
以下情况只能用if不能用switch:
当判断的条件是boolean类型的时候
当判断的条件是范围的时候,比如判断一个值是否在1~99的范围之内
switch和if都可以使用的场景:
针对几个常量值的判断
循环结构
1.for循环
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
执行顺序:
初始化->判断条件语句->循环体语句->控制条件语句->判断条件语句..
注意点:
for()后面的循环体语句如果只有一条语句的话那么可以不用大括号,当然和if一样不要再for()后面写;,比如for();
这个意思是后面加了一条了空语句,这样的话循环表示什么都不执行,建议是不论循环体有几条语句都加上大括号{}
2.while循环
基本格式
while(判断条件语句){
循环体语句;
}
当然在一个循环当中,初始化和控制条件语句其实都是必要的,while循环也可以写成这个形式
初始化语句
while(判断条件语句){
循环体语句;
控制条件语句;
}
while循环和for循环的功能完全一致,二者可以互换
这个形式下,语句的执行顺序和逻辑其实和for是完全一致的,但是为了书面形式上的好理解,一般
如果是对于数值范围内的循环就使用for循环
如果是数值范围以外的特定条件(比如判断用户的输入字符串是否是"end"了,这种就使用while
3.do..while循环
do{
循环体语句;
}(判断条件语句);
初始化语句
do{
循环体语句;
控制条件语句
}while(判断条件语句);
相比while 和for就是最起码会执行一次循环体
注意:
写在循环的大括号中的变量,它的作用范围只有{}中这段范围。
练习:
输出九九乘法表
for(int i=1;i<10;i++){
for(int j=1;j<i+1;j++){
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
}
程序没什么好说的,我要注意的反倒是这个输出中的 \t转义字符
在print的输出的字符串输入 \转义字符 这样的形式,输出的时候会对其进行转义,而\t就相当于是键盘上tab键的位置,会是光标跳到下一个
tab的位置,而不是跳转固定的长度,比如上面的九九乘法表的输出语句如果写成System.out.print(i+"*"+j+"="+i*j+" ");
那么结果会不对齐,因为空格跳转的是固定的长度
\n换行
\r回车
流程控制语句中用到了跳转控制语句
goto 是java的保留字,表示可以跳转到程序的其它位置,但是由于太过灵活,也就是它一定会跳到一个地方,有个时候反倒不方便
有时候我们希望程序达到某个条件的时候,程序直接结束就需要用到break中断 continue继续 return返回
break:
break的使用场景有且只有两种
1.switch中
2.循环语句中(循环体语句中加入了if判断)用于跳出单层循环
第一种情况已经介绍过,在第二种情况,break的使用注意是跳出单层循环而且是当前层的循环,比如有个两层的循环
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
if(i==2){
break;
}
System.out.print("循环:i="+i);
}
System.out.println();//用于换行
}
上面的语句中,当i=2时,将不会有输出
如果希望能够跳出多层循环,需要使用标签法,来实现break跳出“指定“的循环语句
首先使用 标签名: 语句;的形式定义标签
然后使用 break 标签名的形式结束语句
上面的示例语句可以改写为
outter:for(int i=0;i<10;i++){
inner:for(int j=0;j<10;j++){
if(i==2){
break inner;
}
System.out.print("循环:i="+i);
}
System.out.println();//用于换行
}
如果要跳外层则写为
outter:for(int i=0;i<10;i++){
inner:for(int j=0;j<10;j++){
if(i==2){
break outter;
}
System.out.print("循环:i="+i);
}
System.out.println();//用于换行
}
不过跳多层循环,在实际开发中几乎用不到,了解一下就行
continue:
使用场景:
只在循环中使用
continue可以跳出”1次“循环
比如for(...){
if(..){
continue;
}
语句;
}
当满足条件的时候,后面的语句全部都不执行了。
return:
return其实作用与循环用来结束循环的,它是用来结束方法的,当调用return的时候,它会结束当前方法并跳转到上级方法并且返回值给上级方法。