⭐switch语句⭐
敲重点:
switch括号里的条件只有 整数|枚举|字符|字符串
基本语法
switch(整数|枚举|字符|字符串){ case 内容1 : { 内容满足时执行语句; break; } case 内容2 : { 内容满足时执行语句; break; } default:{ 内容都不满足时执行语句; break; } }
代码示例: 根据 day 的值输出星期
int day = 1; switch(day) { case 1: System.out.println("星期一"); break; 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: System.out.println("星期六"); break; case 7: System.out.println("星期日"); break; default: System.out.println("输入有误"); break; }
根据 switch 中值的不同, 会执行对应的 case 语句. 遇到 break 就会结束该 case 语句.
如果 switch 中的值没有匹配的 case, 就会执行 default 中的语句.
我们建议一个 switch 语句最好都要带上 default.
注意事项1 break 不要遗漏, 否则会失去 “多分支选择” 的效果
int day = 1; switch(day) { case 1: System.out.println("星期一"); // break; case 2: System.out.println("星期二"); break; } // 运行结果 星期一 星期二
我们发现, 不写 break 的时候, case 语句会依次向下执行, 从而失去了多分支的效果.
注意事项2 switch 中的值只能是 整数|枚举|字符|字符串
double num = 1.0; switch(num) { case 1.0: System.out.println("hehe"); break; case 2.0: System.out.println("haha"); break; } // 编译出错 Test.java:4: 错误: 不兼容的类型: 从double转换到int可能会有损失 switch(num) { ^ 1 个错误
注意事项3 switch 不能表达复杂的条件
// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe // 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示. if (num > 10 && num < 20) { System.out.println("hehe"); }
注意事项4 switch 虽然支持嵌套, 但是很丑~
int x = 1; int y = 1; switch(x) { case 1: switch(y) { case 1: System.out.println("hehe"); break; } break; case 2: System.out.println("haha"); break; }
代码的美观程度也是一个重要的标准. 毕竟这是看脸的世界.
综上, 我们发现, switch 的使用局限性是比较大的
🗽循环结构🗽
⭐while循环⭐
基本语法格式:
while(循环条件){ 循环语句; }
和if类似循环条件是一个布尔类型(非true即false),若为 true, 则执行循环语句; 否则结束循环.
代码示例1: 打印 1 - 10 的数字
int num = 1; while (num <= 10) { System.out.println(num); num++; }
代码示例2: 计算 1 - 100 的和
int n = 1; int result = 0; while (n <= 100) { result += n; n++; } System.out.println(num); // 执行结果 5050
代码示例3: 计算 5 的阶乘
int n = 1; int result = 1; while (n <= 5) { result *= n; n++; } System.out.println(num); // 执行结果 120
代码示例4: 计算 1! + 2! + 3! + 4! + 5!
int num = 1; int sum = 0; // 外层循环负责求阶乘的和 while (num <= 5) { int factorResult = 1; int tmp = 1; // 里层循环负责完成求阶乘的细节. while (tmp <= num) { factorResult *= tmp; tmp++; } sum += factorResult; num++; } System.out.println("sum = " + sum);
这里我们发现, 当一个代码中带有多重循环的时候
代码的复杂程度就大大提高了
而比较复杂的代码就更容易出错.
不建议无限套娃
注意事项
1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
2. 和 if 类似, while 后面的 { 建议和 while 写在同一行.
3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行.
错误案例
int num = 1; while (num <= 10); { System.out.println(num); num++; } // 执行结果 [无任何输出, 程序死循环]
此时 ; 为 while 的语句体(这是一个空语句), 实际的 { } 部分和循环无关. 此时循环条件 num <= 10 恒成立, 导致代码死循环了.