- 悬垂 else 问题
public static void main(String[] args) { int x = 10; int y = 10; if (x == 20) if (y == 10) System.out.println("aaa"); else System.out.println("bbb"); }
🍤 运行结果:
为什么什么都没有打印?
首先if / else 语句中可以不加大括号,当不加{}时,他只控制下面的一条语句,要控制多行,必须加上大括号。
其次就是 else 是和最接近的 if 匹配,并不是和谁对齐就与它匹配。
2.2 switch 语句
基本语法:
switch(表达式){ case 常量值1:{ 语句1; [break;] } case 常量值2:{ 语句2; [break;] } ... default:{ ...;//内容都不满足时执行语句 [break;] } }
执行流程:
- 先计算表达式的值
- 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
- 当表达式的值没有与所列项匹配时,执行default
实例:根据 day 的值输出星期
public static void main(String[] args) { int day = 6; switch(day) { case 1: System.out.println("星期一"); break;//遇到break停止,跳出switch语句 case 2: System.out.println("星期二"); break; case 3: System.out.println("星期三"); break; case 4: System.out.println("星期四"); break; case 5: System.out.println("星期五"); break; case 6: case 7: System.out.println("周末"); break; default: System.out.println("输入有误"); break; } }
🍤 运行结果:
注:
- 多个case后的常量值不可以重复
- switch的括号内只能是以下类型的表达式:
基本类型:byte、char、short、int,不能是long、float、double、boolean类型;
引用类型:String常量串、枚举类型
- break 不要遗漏,否则会失去 “多分支选择” 的效果
- switch 不能表达复杂的条件
- switch 虽然支持嵌套,但是很丑,一般不推荐,毕竟这是一个看脸的世界~
使用错误类型
public static void main(String[] args) { double num=1.0; switch(num) { case 1.0: System.out.println("hehe"); break; case 2.0: System.out.println("haha"); break; } }
🍤 编译出错:
遗漏break
public static void main(String[] args) { int day = 1; switch(day) { case 1: System.out.println("星期一"); // break; case 2: System.out.println("星期二"); break; } }
🍤 运行结果:
不能表达复杂条件
// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe // 这样的代码使用 if 很容易表达, 但是使用 switch 无法表示 if (num > 10 && num < 20) { System.out.println("hehe"); }