Switch语句
switch语句的格式:
switch(表达式){
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
case 常量值3:
语句体3;
break;
...
default:
语句体n+1;
}
注: 1.switch为语句的关键句,表示开关语句
2.表达式:必须返回一个特定类型的值(不能是boolean类型),并且 要与case的类型相匹配
这个地方有限定:byte/short/int/char(唯独没有boolean)
JDk5的版本以后支持枚举
JDK7的版本以后支持String
举例:
switch(3>4) //此句会报错
case true
case false ✘
3.常量:无论是一个常量,还是常量表达式,都可以(常量表达式会先 自己算出结果,然后再匹配,两者都属于字面常量)
不能有重复的case
4.default:当上面所有case的值都不匹配时,就会执行其代码
5.break(跳出当前循环)
break能否省略?
可以省略,但是不建议,因为会造成结果的穿透
举例:
int i=1;
switch(i)
case 1:
case 2:
case 3:
如果不加break,将会执行case 1后面的所有语句,直到行尾
6.switch语句的结束:①遇到break ②到switch末尾
因此,当default放在开头前,必须加break,不然就会穿透
举例:
int x=4;
switch(x)
{
default:
x=x+2;
case 3:
x++;
case 6:
x++;
} //输出8
注:
就算X变为6,也不会再去匹配,执行到 break 或 语句尾
练习:
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("我也不知道啥季节");
break;
}
} //利用穿透,一直执行,理解为多个执行同一语句,(case 3,4会 报错)
For语句
for(初始化条件;判断条件语句;控制条件语句){
循环体语句;
}
a.执行初始化条件 int a = 5;
b.执行判断条件语句,看其返回的结果是true还是false
如果是true,就继续执行循环体 a < 50
如果是false,就结束循环
c.执行循环体语句
d.执行控制条件语句 a++
e.继续回到b步骤进行执行
While语句
基本格式
while(判断条件语句) {
循环体语句;
}
扩展格式
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
Do-While语句
do {
循环体语句;
}while((判断条件语句);
扩展格式
初始化语句;
do {
循环体语句;
控制条件语句;
} while((判断条件语句);
注:无论,判断结果如何,都会先执行一次(不推荐使用)
控制条件语句:continue:中断
for(int i = 1;i <= 10;i++) {
if(i == 4) {
continue;//当前循环不执行,后面的继续(不执行 语句,直接转到控制语句)
}
System.out.println(i);//1 2 3 5 6 7 8 9 10
}
补充
求余:提取各个位数
举例:
int i=1234
int ge=i%10; //提取个位数
int shi=i/10%10; //提取十位数:* / % 优先级一样,左往右
int bai=i/100%10; //提取百位数
int qian=i/1000; //提取千位:可以取余也可以不取(取模)
注:原理:这数除以10,100,变为double型,在进行类型转换时,对丢失小数部分,个位上的数就是我们要提取的数
while与for的区别:
1.当循环结束后,还要使用循环变量,用while
当循环结束后,不需使用循环变量,用for
举例:
for(int i=1;i<2;i++)
int i=1;
while(i<2); //涉及到使用率的问题,因此一般使用for,减少内存 的开销
2.当循环次数已知时,使用for
当循环次数未知,使用while
3.for while使用指导:
先看需不需要使用循环变量,如果要,一定是while,就算是已知条件 也可以用while来实现。如果不要,基本上就用for;(能用for就用 for, 节省内存的开销,当循环结束后,系统会自动释放循环变量的内 存)
4.优先考虑for循环,其次while循环,最后doWhile循环.
break结束循环
使用的常见:
a.swtich
b.所有循环语句
注意:离开上面的场景 无效(如无特殊标记,只能结束当前循环)
如何使用?
跳出单层循环:简单不讲
跳出多层循环:
1.在外面定义一个开关标记,然后使用标记来判断是否结束
2.使用标签
标签名:循环语句
break 标签名;
3.无论是循环语句,还是switch语句都适用
4.JDK7以前的版本都没有
举例:
wc:for()
{
switch()
{
case 1:
break; //跳出switch循环
case 2:
break wc; //跳出for循环(跳出整个循环)
}
}
int i=4;
int a=5;
wc:switch (i) {
case 4:
{
switch(a)
{
case 5:
System.out.println("你好");
break wc; //跳出大switch
}
}
case 3:
System.out.println("不好");
break;
}
超市管理系统
1.退出系统为:System.exit(0); //返回某个数值,表示退出
2.try{ //使用睡眠,使程序暂停一会
Thread.sleep(1000);
}
catch(Exception e)
{
e.printStackTrace();
} //因为Thread.sleep(毫秒)会抛出一个 异常,因此必须catch(Exception e){ e.printStackTrace()}
StackTrace:堆痕
3.在case中,0执行后不能继续外层的循环,只能结束(如果想按0后继续回到 上一层的循环,是不允许的)
4.由于java中没有特定的输入方法来接收char类型,因此需要以下方法
String y_n=sc.next();
char c = y_n.charAt(0);
就是先获取一个字符串类型,再获取字符串类型首个字符