【原】Java学习笔记005 - 流程控制
1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // 程序的流程控制(流程结构):顺序结构、选择结构、循环结构 6 7 // 顺序结构:从上向下,顺序执行 8 System.out.println("出生..."); 9 System.out.println("享受人生..."); 10 System.out.println("挂了..."); 11 } 12 }
1 package cn.temptation; 2 3 public class Sample02 { 4 public static void main(String[] args) { 5 // 选择结构:1、if语句块; 2、switch语句块 6 7 // if语句块 8 9 // 形式1、if(比较表达式) { ... } 10 int i = 2; 11 12 // if (i != 3) { 13 // System.out.println(i); 14 // } 15 16 // 注意: 17 // 1、比较表达式的结果必须是一个boolean类型的值 18 // 2、if语句如果不使用大括号,语法上可以;但是不使用大括号,if语句块只会影响其后的一行语句 19 20 // if (i != 3) 21 // System.out.println(i); 22 23 // 下面执行结果为2,3 24 // if (i != 3) { 25 // System.out.println(i); 26 // System.out.println(++i); 27 // } 28 29 // 下面执行结果为2,3 30 // if (i != 3) 31 // System.out.println(i); 32 // System.out.println(++i); 33 34 // 下面执行无结果 35 // if (i == 3) { 36 // System.out.println(i); 37 // System.out.println(++i); 38 // } 39 40 // 下面执行结果为3,从执行结果得知,if无大括号的语句块后的第二行语句开始,就不再受if语句块的影响 41 if (i == 3) 42 System.out.println(i); 43 System.out.println(++i); 44 } 45 }
1 package cn.temptation; 2 3 public class Sample03 { 4 public static void main(String[] args) { 5 // 形式2、if(比较表达式) { ... } else { ... } 6 int i = 2; 7 int j = 3; 8 9 if (i == j) { 10 System.out.println("i等于j"); 11 } else { 12 System.out.println("i不等于j"); 13 } 14 15 // 联想一下,这种形式的if结构(if...else结构)和 三元运算符的效果差不多 16 } 17 }
1 package cn.temptation; 2 3 import java.util.Scanner; 4 5 public class Sample04 { 6 public static void main(String[] args) { 7 // 需求:使用if...else...结构获取通过键盘录入的三个数字中最大的一个 8 9 // 声明三个变量来接收键盘录入的数字 10 Scanner input = new Scanner(System.in); 11 // 一行中声明多个变量 12 int i, j, k; 13 System.out.println("输入第一个数字:"); 14 i = input.nextInt(); 15 System.out.println("输入第二个数字:"); 16 j = input.nextInt(); 17 System.out.println("输入第三个数字:"); 18 k = input.nextInt(); 19 input.close(); 20 21 // 使用if...else...结构比较这三个数字 22 int temp = 0; 23 int max = 0; 24 25 // // 写法1、分步操作 26 // // ① 先把i、j进行比较得出较大的一个赋值给临时变量temp 27 // if (i > j) { 28 // temp = i; 29 // } else { 30 // temp = j; 31 // } 32 // 33 // // ② 再把temp、k进行比较得出最大的一个赋值给最终变量max 34 // if (temp > k) { 35 // max = temp; 36 // } else { 37 // max = k; 38 // } 39 40 // 写法2、if...else...的嵌套 41 if (i > j) { 42 // 满足该条件时,说明i是i、j中较大的 43 if (i > k) { 44 max = i; 45 } else { 46 max = k; 47 } 48 } else { 49 // 满足该条件时,说明j是i、j中较大的 50 if (j > k) { 51 max = j; 52 } else { 53 max = k; 54 } 55 } 56 57 System.out.println("输入的数字为:" + i + "," + j + "," + k + "中,最大的一个数字为:" + max); 58 } 59 }
1 package cn.temptation; 2 3 public class Sample05 { 4 public static void main(String[] args) { 5 // 形式3 6 // if(比较表达式) { ... } 7 // else if(比较表达式) { ... } 8 // else if(比较表达式) { ... } 9 // ... 10 // else { ... } 11 // 执行时,依次判断每一个比较表达式是否为true,如果为true,就执行该if语句块中的内容 12 13 // 注意:else if之间有一个空格 14 15 int i = 2; 16 17 // if (i == 3) { 18 // System.out.println("i等于3"); 19 // } else if (i == 5) { 20 // System.out.println("i等于5"); 21 // } else { 22 // System.out.println("i等于其他值"); 23 // } 24 25 // 注意:如果多个比较表达式均为true(多个条件均成立),那么会执行第1个为true的if语句块中的内容 26 // 后续为true的if语句块不会再走入了 27 // if (i < 3) { 28 // System.out.println("i小于3"); 29 // } else if (i < 5) { 30 // System.out.println("i小于5"); 31 // } else { 32 // System.out.println("i等于:" + i); 33 // } 34 35 if (i < 5) { 36 System.out.println("i小于5"); 37 } else if (i < 3) { 38 System.out.println("i小于3"); 39 } else { 40 System.out.println("i等于:" + i); 41 } 42 } 43 }
1 package cn.temptation; 2 3 import java.util.Scanner; 4 5 public class Sample06 { 6 public static void main(String[] args) { 7 // 需求:根据键盘录入的数字,判断输入的数字为奇数还是偶数?(分别使用if结构 和 三元运算符实现) 8 Scanner input = new Scanner(System.in); 9 System.out.println("输入一个数字:"); 10 int i = input.nextInt(); 11 input.close(); 12 13 // 写法1、使用if结构 14 // if (i % 2 == 0) { 15 // System.out.println("该数为偶数"); 16 // } else { 17 // System.out.println("该数为奇数"); 18 // } 19 20 // 写法2、三元运算符 21 // 因为三元运算符 和 if...else...结构的相近,考虑直接把if...else结构中的语句放到三元运算符中,这是生搬硬套,语法出错 22 // (i % 2 == 0) ? (System.out.println("该数为偶数")) : (System.out.println("该数为奇数")); 23 24 // 变通写法1、本质上和写法1是一样的 25 // boolean result = (i % 2 == 0) ? true : false; 26 // if (result) { 27 // System.out.println("该数为偶数"); 28 // } else { 29 // System.out.println("该数为奇数"); 30 // } 31 32 // 变通写法2、纯粹使用三元运算符 33 // 根据是否为偶数获取相应的字符串 34 String msg = (i % 2 == 0) ? "该数为偶数" : "该数为奇数"; 35 // 输出字符串的内容 36 System.out.println(msg); 37 } 38 }
1 package cn.temptation; 2 3 import java.util.Scanner; 4 5 public class Sample07 { 6 public static void main(String[] args) { 7 // 需求:根据键盘录入的分数数字,判断输入的分数是优秀(90~100)、良好(80~89)、及格(60~79)、不及格(0~59) 8 Scanner input = new Scanner(System.in); 9 System.out.println("输入一个分数:"); 10 int score = input.nextInt(); 11 input.close(); 12 13 // 下句表示范围的写法是错误的,画个数轴看一下 14 // if (score >= 90 || score <= 100) { 15 if (score >= 90 && score <= 100) { 16 System.out.println("优秀"); 17 } else if (score >= 80 && score <= 89) { 18 System.out.println("良好"); 19 } else if (score >= 60 && score <= 79) { 20 System.out.println("及格"); 21 } else if (score >= 0 && score <= 59) { 22 System.out.println("不及格"); 23 } else { 24 System.out.println("输入的分数应该在【0~100】之间"); 25 } 26 27 // 注意:仔细看看需求,其实隐含了一个条件:即分数的范围是在0~100之间 28 } 29 }
1 package cn.temptation; 2 3 import java.util.Scanner; 4 5 public class Sample08 { 6 public static void main(String[] args) { 7 // 需求:根据键盘录入的月份数字,判断是哪一个季节?(3~5月为春季,6~8月为夏季,9~11月为秋季,12~2月为冬季) 8 Scanner input = new Scanner(System.in); 9 System.out.println("输入一个月份:"); 10 int month = input.nextInt(); 11 input.close(); 12 13 // 写法1 14 if (month >= 3 && month <= 5) { 15 System.out.println("Spring"); 16 } else if (month >= 6 && month <= 8) { 17 System.out.println("Summer"); 18 } else if (month >= 9 && month <= 11) { 19 System.out.println("Autumn"); 20 // 下句写法没有满足条件的数字 21 // } else if (month >= 12 && month <= 2) { 22 } else if (month == 12 || month == 1 || month == 2) { 23 System.out.println("Winter"); 24 } else { 25 System.out.println("输入的月份应该在【1~12】之间"); 26 } 27 28 // 写法2 29 int result = month / 3; 30 31 if (month == 0 || month == 13 || month == 14 || result < 0 || result > 4) { 32 System.out.println("输入的月份应该在【1~12】之间"); 33 } else if (result < 1) { 34 System.out.println("Winter"); 35 } else if (result < 2) { 36 System.out.println("Spring"); 37 } else if (result < 3) { 38 System.out.println("Summer"); 39 } else if (result < 4) { 40 System.out.println("Autumn"); 41 } else { 42 System.out.println("Winter"); 43 } 44 45 // 编写代码及测试时,要充分考虑,特别是边界值,考虑时不要遗漏 46 } 47 }
1 package cn.temptation; 2 3 public class Sample09 { 4 public static void main(String[] args) { 5 // 选择结构:switch结构 6 7 // switch (变量) { 8 // case 值1: 9 // break; 10 // case 值2: 11 // break; 12 // ... 13 // case 值n: 14 // break; 15 // default: 16 // break; 17 // } 18 19 // 注意: 20 // 1、switch后括号中的内容有一些限制:byte、short、int、long、char 21 // JDK 5后可以使用枚举;JDK 7后可以使用字符串类型 22 // 2、case:后面的值拿来和switch括号中的内容进行比较的,当比较结果为true时,会执行该case语句块中的内容 23 // 3、break:英文是中断的意思,也就是说后续都不做了,作用范围到switch右侧的大括号为止 24 // 4、default:英文是默认的意思,如果case条件的值都不能匹配switch括号中的值,那么执行default语句块中的内容 25 // 5、switch结构中可以没有default部分,但是要求加上default部分 26 // 6、switch结构中可以只有default部分,表示默认就执行该default语句块中的内容 27 28 int i = 2; 29 30 switch (i) { 31 case 1: 32 System.out.println("i等于1"); 33 break; 34 case 2: 35 System.out.println("i等于2"); 36 break; 37 case 3: 38 System.out.println("i等于3"); 39 break; 40 default: 41 System.out.println("i等于其他值"); 42 break; 43 } 44 45 System.out.println("这里不会收到switch结构中的break语句的影响"); 46 47 switch (i) { 48 default: 49 System.out.println("switch结构中只有default部分"); 50 break; 51 } 52 } 53 }
1 package cn.temptation; 2 3 import java.util.Scanner; 4 5 public class Sample10 { 6 public static void main(String[] args) { 7 // 注意: 8 // 1、case部分的值不能重复,否则有语法错误:Duplicate case 9 // 2、default部分不是非得放在switch结构中的最后,可以放在任何和case同级的位置,只是习惯性的放在最后 10 // 3、放在最后的default部分,可以不写break语句,但是建议写上 11 12 // 需求:根据键盘录入的数字,使用switch结构判断是星期几 13 Scanner input = new Scanner(System.in); 14 System.out.println("输入一个数字作为星期几:"); 15 int weekDay = input.nextInt(); 16 input.close(); 17 18 switch (weekDay) { 19 // default部分可以放在switch结构的最前端 20 // default: 21 // System.out.println("输入不正确"); 22 // break; 23 case 1: 24 System.out.println("Monday"); 25 break; 26 case 2: 27 System.out.println("Tuesday"); 28 break; 29 // default部分可以放在switch结构的任意位置 30 // default: 31 // System.out.println("输入不正确"); 32 // break; 33 case 3: 34 System.out.println("Wednesday"); 35 break; 36 case 4: 37 System.out.println("Thursday"); 38 break; 39 case 5: 40 System.out.println("Friday"); 41 break; 42 case 6: 43 System.out.println("Saturday"); 44 break; 45 case 7: 46 System.out.println("Sunday"); 47 break; 48 default: 49 System.out.println("输入不正确"); 50 // 写在最后的default部分中的break语句可以省略不写 51 // break; 52 } 53 } 54 }
1 package cn.temptation; 2 3 public class Sample11 { 4 public static void main(String[] args) { 5 // switch结构在JDK 7后支持字符串,case后就可以使用字符串 6 String course = "Java"; 7 8 switch (course) { 9 case "Android": 10 System.out.println("Android是主流的移动开发平台"); 11 break; 12 case "Java": 13 System.out.println("Java真简单"); 14 break; 15 case "MySQL": 16 System.out.println("MySQL是主流的数据库"); 17 break; 18 default: 19 System.out.println("想混口饭吃,总得会一样!"); 20 break; 21 } 22 } 23 }
1 package cn.temptation; 2 3 public class Sample12 { 4 public static void main(String[] args) { 5 // 特别注意: 6 // switch结构中,case部分需要结合break语句使用,如果只写case部分不写其相应的break语句,会发生"case击穿"现象 7 // 如果case部分没有相应的break语句,当该case条件满足时,执行该case部分的语句内容,并一直向下执行(无视其他case条件),直到遇见break为止 8 // 如果一直没有遇见break,以switch右侧的大括号(switch结构作用域右侧的边界)作为执行结束的依据 9 10 int i = 2; 11 12 switch (i) { 13 case 1: 14 System.out.println("i等于1"); 15 break; 16 case 2: 17 System.out.println("i等于2"); 18 case 3: 19 System.out.println("i等于3"); 20 // break; 21 default: 22 System.out.println("i等于其他值"); 23 break; 24 } 25 26 System.out.println("这里会不会被执行到?"); 27 } 28 }
1 package cn.temptation; 2 3 public class Sample13 { 4 public static void main(String[] args) { 5 int i = 2; 6 7 // 问题1 8 // switch (i) { 9 // default: 10 // i++; 11 // break; 12 // case 2: 13 // ++i; 14 // break; 15 // case 3: 16 // ++i; 17 // break; 18 // case 4: 19 // ++i; 20 // break; 21 // } 22 // 23 // System.out.println(i); // 3 24 25 // default部分放在switch结构的最前面,也不会第一个执行,也优先匹配case条件 26 27 // 问题2 28 switch (i) { 29 default: 30 i++; 31 case 3: 32 ++i; 33 case 4: 34 ++i; 35 } 36 37 System.out.println(i); 38 } 39 }
1 package cn.temptation; 2 3 import java.util.Scanner; 4 5 public class Sample14 { 6 public static void main(String[] args) { 7 // 需求:根据键盘录入的数字,判断是什么季节?(分别使用if结构 和 switch结构) 8 Scanner input = new Scanner(System.in); 9 System.out.println("输入一个月份:"); 10 int month = input.nextInt(); 11 input.close(); 12 13 // 写法1、if结构 14 if (month >= 3 && month <= 5) { 15 System.out.println("Spring"); 16 } else if (month >= 6 && month <= 8) { 17 System.out.println("Summer"); 18 } else if (month >= 9 && month <= 11) { 19 System.out.println("Autumn"); 20 } else if (month == 12 || month == 1 || month == 2) { 21 System.out.println("Winter"); 22 } else { 23 System.out.println("输入的月份应该在【1~12】之间"); 24 } 25 26 // 写法2、switch结构 27 // switch (month) { 28 // case 1: 29 // System.out.println("Winter"); 30 // break; 31 // case 2: 32 // System.out.println("Winter"); 33 // break; 34 // case 3: 35 // System.out.println("Spring"); 36 // break; 37 // case 4: 38 // System.out.println("Spring"); 39 // break; 40 // case 5: 41 // System.out.println("Spring"); 42 // break; 43 // case 6: 44 // System.out.println("Summer"); 45 // break; 46 // case 7: 47 // System.out.println("Summer"); 48 // break; 49 // case 8: 50 // System.out.println("Summer"); 51 // break; 52 // case 9: 53 // System.out.println("Autumn"); 54 // break; 55 // case 10: 56 // System.out.println("Autumn"); 57 // break; 58 // case 11: 59 // System.out.println("Autumn"); 60 // break; 61 // case 12: 62 // System.out.println("Winter"); 63 // break; 64 // default: 65 // System.out.println("输入的月份应该在【1~12】之间"); 66 // break; 67 // } 68 69 // 因为switch结构中的很多case条件都做的是相同的事情,所以考虑优化一下写法 70 // 考虑把做相同事情的case条件合并到一起,使用case击穿,这样可以省略一些重复的代码 71 switch (month) { 72 case 12: 73 case 1: 74 case 2: 75 System.out.println("Winter"); 76 break; 77 // 下句写法语法错误:The operator || is undefined for the argument type(s) int, int 78 // case 3 || 4 || 5: 79 case 3: 80 case 4: 81 case 5: 82 System.out.println("Spring"); 83 break; 84 case 6: 85 case 7: 86 case 8: 87 System.out.println("Summer"); 88 break; 89 case 9: 90 case 10: 91 case 11: 92 System.out.println("Autumn"); 93 break; 94 default: 95 System.out.println("输入的月份应该在【1~12】之间"); 96 break; 97 } 98 } 99 // if结构 和 switch结构的区别: 100 // 1、if结构的括号内使用的是比较表达式,得到的结果是boolean类型的值 101 // 2、switch结构的case后面跟的是用来匹配的值 102 103 // if结构 和 switch结构的选择: 104 // 1、if结构用于条件描述的范围比较大的场合 105 // 2、switch结构用于少量的有特定的值进行比较的场合 106 }