【原】Java学习笔记005 - 流程控制

时间:2023-03-08 16:42:35
【原】Java学习笔记005 - 流程控制
 package cn.temptation;

 public class Sample01 {
public static void main(String[] args) {
// 程序的流程控制(流程结构):顺序结构、选择结构、循环结构 // 顺序结构:从上向下,顺序执行
System.out.println("出生...");
System.out.println("享受人生...");
System.out.println("挂了...");
}
}
 package cn.temptation;

 public class Sample02 {
public static void main(String[] args) {
// 选择结构:1、if语句块; 2、switch语句块 // if语句块 // 形式1、if(比较表达式) { ... }
int i = 2; // if (i != 3) {
// System.out.println(i);
// } // 注意:
// 1、比较表达式的结果必须是一个boolean类型的值
// 2、if语句如果不使用大括号,语法上可以;但是不使用大括号,if语句块只会影响其后的一行语句 // if (i != 3)
// System.out.println(i); // 下面执行结果为2,3
// if (i != 3) {
// System.out.println(i);
// System.out.println(++i);
// } // 下面执行结果为2,3
// if (i != 3)
// System.out.println(i);
// System.out.println(++i); // 下面执行无结果
// if (i == 3) {
// System.out.println(i);
// System.out.println(++i);
// } // 下面执行结果为3,从执行结果得知,if无大括号的语句块后的第二行语句开始,就不再受if语句块的影响
if (i == 3)
System.out.println(i);
System.out.println(++i);
}
}
 package cn.temptation;

 public class Sample03 {
public static void main(String[] args) {
// 形式2、if(比较表达式) { ... } else { ... }
int i = 2;
int j = 3; if (i == j) {
System.out.println("i等于j");
} else {
System.out.println("i不等于j");
} // 联想一下,这种形式的if结构(if...else结构)和 三元运算符的效果差不多
}
}
 package cn.temptation;

 import java.util.Scanner;

 public class Sample04 {
public static void main(String[] args) {
// 需求:使用if...else...结构获取通过键盘录入的三个数字中最大的一个 // 声明三个变量来接收键盘录入的数字
Scanner input = new Scanner(System.in);
// 一行中声明多个变量
int i, j, k;
System.out.println("输入第一个数字:");
i = input.nextInt();
System.out.println("输入第二个数字:");
j = input.nextInt();
System.out.println("输入第三个数字:");
k = input.nextInt();
input.close(); // 使用if...else...结构比较这三个数字
int temp = 0;
int max = 0; // // 写法1、分步操作
// // ① 先把i、j进行比较得出较大的一个赋值给临时变量temp
// if (i > j) {
// temp = i;
// } else {
// temp = j;
// }
//
// // ② 再把temp、k进行比较得出最大的一个赋值给最终变量max
// if (temp > k) {
// max = temp;
// } else {
// max = k;
// } // 写法2、if...else...的嵌套
if (i > j) {
// 满足该条件时,说明i是i、j中较大的
if (i > k) {
max = i;
} else {
max = k;
}
} else {
// 满足该条件时,说明j是i、j中较大的
if (j > k) {
max = j;
} else {
max = k;
}
} System.out.println("输入的数字为:" + i + "," + j + "," + k + "中,最大的一个数字为:" + max);
}
}
 package cn.temptation;

 public class Sample05 {
public static void main(String[] args) {
// 形式3
// if(比较表达式) { ... }
// else if(比较表达式) { ... }
// else if(比较表达式) { ... }
// ...
// else { ... }
// 执行时,依次判断每一个比较表达式是否为true,如果为true,就执行该if语句块中的内容 // 注意:else if之间有一个空格 int i = 2; // if (i == 3) {
// System.out.println("i等于3");
// } else if (i == 5) {
// System.out.println("i等于5");
// } else {
// System.out.println("i等于其他值");
// } // 注意:如果多个比较表达式均为true(多个条件均成立),那么会执行第1个为true的if语句块中的内容
// 后续为true的if语句块不会再走入了
// if (i < 3) {
// System.out.println("i小于3");
// } else if (i < 5) {
// System.out.println("i小于5");
// } else {
// System.out.println("i等于:" + i);
// } if (i < 5) {
System.out.println("i小于5");
} else if (i < 3) {
System.out.println("i小于3");
} else {
System.out.println("i等于:" + i);
}
}
}
 package cn.temptation;

 import java.util.Scanner;

 public class Sample06 {
public static void main(String[] args) {
// 需求:根据键盘录入的数字,判断输入的数字为奇数还是偶数?(分别使用if结构 和 三元运算符实现)
Scanner input = new Scanner(System.in);
System.out.println("输入一个数字:");
int i = input.nextInt();
input.close(); // 写法1、使用if结构
// if (i % 2 == 0) {
// System.out.println("该数为偶数");
// } else {
// System.out.println("该数为奇数");
// } // 写法2、三元运算符
// 因为三元运算符 和 if...else...结构的相近,考虑直接把if...else结构中的语句放到三元运算符中,这是生搬硬套,语法出错
// (i % 2 == 0) ? (System.out.println("该数为偶数")) : (System.out.println("该数为奇数")); // 变通写法1、本质上和写法1是一样的
// boolean result = (i % 2 == 0) ? true : false;
// if (result) {
// System.out.println("该数为偶数");
// } else {
// System.out.println("该数为奇数");
// } // 变通写法2、纯粹使用三元运算符
// 根据是否为偶数获取相应的字符串
String msg = (i % 2 == 0) ? "该数为偶数" : "该数为奇数";
// 输出字符串的内容
System.out.println(msg);
}
}
 package cn.temptation;

 import java.util.Scanner;

 public class Sample07 {
public static void main(String[] args) {
// 需求:根据键盘录入的分数数字,判断输入的分数是优秀(90~100)、良好(80~89)、及格(60~79)、不及格(0~59)
Scanner input = new Scanner(System.in);
System.out.println("输入一个分数:");
int score = input.nextInt();
input.close(); // 下句表示范围的写法是错误的,画个数轴看一下
// if (score >= 90 || score <= 100) {
if (score >= 90 && score <= 100) {
System.out.println("优秀");
} else if (score >= 80 && score <= 89) {
System.out.println("良好");
} else if (score >= 60 && score <= 79) {
System.out.println("及格");
} else if (score >= 0 && score <= 59) {
System.out.println("不及格");
} else {
System.out.println("输入的分数应该在【0~100】之间");
} // 注意:仔细看看需求,其实隐含了一个条件:即分数的范围是在0~100之间
}
}
 package cn.temptation;

 import java.util.Scanner;

 public class Sample08 {
public static void main(String[] args) {
// 需求:根据键盘录入的月份数字,判断是哪一个季节?(3~5月为春季,6~8月为夏季,9~11月为秋季,12~2月为冬季)
Scanner input = new Scanner(System.in);
System.out.println("输入一个月份:");
int month = input.nextInt();
input.close(); // 写法1
if (month >= 3 && month <= 5) {
System.out.println("Spring");
} else if (month >= 6 && month <= 8) {
System.out.println("Summer");
} else if (month >= 9 && month <= 11) {
System.out.println("Autumn");
// 下句写法没有满足条件的数字
// } else if (month >= 12 && month <= 2) {
} else if (month == 12 || month == 1 || month == 2) {
System.out.println("Winter");
} else {
System.out.println("输入的月份应该在【1~12】之间");
} // 写法2
int result = month / 3; if (month == 0 || month == 13 || month == 14 || result < 0 || result > 4) {
System.out.println("输入的月份应该在【1~12】之间");
} else if (result < 1) {
System.out.println("Winter");
} else if (result < 2) {
System.out.println("Spring");
} else if (result < 3) {
System.out.println("Summer");
} else if (result < 4) {
System.out.println("Autumn");
} else {
System.out.println("Winter");
} // 编写代码及测试时,要充分考虑,特别是边界值,考虑时不要遗漏
}
}
 package cn.temptation;

 public class Sample09 {
public static void main(String[] args) {
// 选择结构:switch结构 // switch (变量) {
// case 值1:
// break;
// case 值2:
// break;
// ...
// case 值n:
// break;
// default:
// break;
// } // 注意:
// 1、switch后括号中的内容有一些限制:byte、short、int、long、char
// JDK 5后可以使用枚举;JDK 7后可以使用字符串类型
// 2、case:后面的值拿来和switch括号中的内容进行比较的,当比较结果为true时,会执行该case语句块中的内容
// 3、break:英文是中断的意思,也就是说后续都不做了,作用范围到switch右侧的大括号为止
// 4、default:英文是默认的意思,如果case条件的值都不能匹配switch括号中的值,那么执行default语句块中的内容
// 5、switch结构中可以没有default部分,但是要求加上default部分
// 6、switch结构中可以只有default部分,表示默认就执行该default语句块中的内容 int i = 2; switch (i) {
case 1:
System.out.println("i等于1");
break;
case 2:
System.out.println("i等于2");
break;
case 3:
System.out.println("i等于3");
break;
default:
System.out.println("i等于其他值");
break;
} System.out.println("这里不会收到switch结构中的break语句的影响"); switch (i) {
default:
System.out.println("switch结构中只有default部分");
break;
}
}
}
 package cn.temptation;

 import java.util.Scanner;

 public class Sample10 {
public static void main(String[] args) {
// 注意:
// 1、case部分的值不能重复,否则有语法错误:Duplicate case
// 2、default部分不是非得放在switch结构中的最后,可以放在任何和case同级的位置,只是习惯性的放在最后
// 3、放在最后的default部分,可以不写break语句,但是建议写上 // 需求:根据键盘录入的数字,使用switch结构判断是星期几
Scanner input = new Scanner(System.in);
System.out.println("输入一个数字作为星期几:");
int weekDay = input.nextInt();
input.close(); switch (weekDay) {
// default部分可以放在switch结构的最前端
// default:
// System.out.println("输入不正确");
// break;
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
// default部分可以放在switch结构的任意位置
// default:
// System.out.println("输入不正确");
// break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
break;
case 7:
System.out.println("Sunday");
break;
default:
System.out.println("输入不正确");
// 写在最后的default部分中的break语句可以省略不写
// break;
}
}
}
 package cn.temptation;

 public class Sample11 {
public static void main(String[] args) {
// switch结构在JDK 7后支持字符串,case后就可以使用字符串
String course = "Java"; switch (course) {
case "Android":
System.out.println("Android是主流的移动开发平台");
break;
case "Java":
System.out.println("Java真简单");
break;
case "MySQL":
System.out.println("MySQL是主流的数据库");
break;
default:
System.out.println("想混口饭吃,总得会一样!");
break;
}
}
}
 package cn.temptation;

 public class Sample12 {
public static void main(String[] args) {
// 特别注意:
// switch结构中,case部分需要结合break语句使用,如果只写case部分不写其相应的break语句,会发生"case击穿"现象
// 如果case部分没有相应的break语句,当该case条件满足时,执行该case部分的语句内容,并一直向下执行(无视其他case条件),直到遇见break为止
// 如果一直没有遇见break,以switch右侧的大括号(switch结构作用域右侧的边界)作为执行结束的依据 int i = 2; switch (i) {
case 1:
System.out.println("i等于1");
break;
case 2:
System.out.println("i等于2");
case 3:
System.out.println("i等于3");
// break;
default:
System.out.println("i等于其他值");
break;
} System.out.println("这里会不会被执行到?");
}
}
 package cn.temptation;

 public class Sample13 {
public static void main(String[] args) {
int i = 2; // 问题1
// switch (i) {
// default:
// i++;
// break;
// case 2:
// ++i;
// break;
// case 3:
// ++i;
// break;
// case 4:
// ++i;
// break;
// }
//
// System.out.println(i); // 3 // default部分放在switch结构的最前面,也不会第一个执行,也优先匹配case条件 // 问题2
switch (i) {
default:
i++;
case 3:
++i;
case 4:
++i;
} System.out.println(i);
}
}
 package cn.temptation;

 import java.util.Scanner;

 public class Sample14 {
public static void main(String[] args) {
// 需求:根据键盘录入的数字,判断是什么季节?(分别使用if结构 和 switch结构)
Scanner input = new Scanner(System.in);
System.out.println("输入一个月份:");
int month = input.nextInt();
input.close(); // 写法1、if结构
if (month >= 3 && month <= 5) {
System.out.println("Spring");
} else if (month >= 6 && month <= 8) {
System.out.println("Summer");
} else if (month >= 9 && month <= 11) {
System.out.println("Autumn");
} else if (month == 12 || month == 1 || month == 2) {
System.out.println("Winter");
} else {
System.out.println("输入的月份应该在【1~12】之间");
} // 写法2、switch结构
// switch (month) {
// case 1:
// System.out.println("Winter");
// break;
// case 2:
// System.out.println("Winter");
// break;
// case 3:
// System.out.println("Spring");
// break;
// case 4:
// System.out.println("Spring");
// break;
// case 5:
// System.out.println("Spring");
// break;
// case 6:
// System.out.println("Summer");
// break;
// case 7:
// System.out.println("Summer");
// break;
// case 8:
// System.out.println("Summer");
// break;
// case 9:
// System.out.println("Autumn");
// break;
// case 10:
// System.out.println("Autumn");
// break;
// case 11:
// System.out.println("Autumn");
// break;
// case 12:
// System.out.println("Winter");
// break;
// default:
// System.out.println("输入的月份应该在【1~12】之间");
// break;
// } // 因为switch结构中的很多case条件都做的是相同的事情,所以考虑优化一下写法
// 考虑把做相同事情的case条件合并到一起,使用case击穿,这样可以省略一些重复的代码
switch (month) {
case 12:
case 1:
case 2:
System.out.println("Winter");
break;
// 下句写法语法错误:The operator || is undefined for the argument type(s) int, int
// case 3 || 4 || 5:
case 3:
case 4:
case 5:
System.out.println("Spring");
break;
case 6:
case 7:
case 8:
System.out.println("Summer");
break;
case 9:
case 10:
case 11:
System.out.println("Autumn");
break;
default:
System.out.println("输入的月份应该在【1~12】之间");
break;
}
}
// if结构 和 switch结构的区别:
// 1、if结构的括号内使用的是比较表达式,得到的结果是boolean类型的值
// 2、switch结构的case后面跟的是用来匹配的值 // if结构 和 switch结构的选择:
// 1、if结构用于条件描述的范围比较大的场合
// 2、switch结构用于少量的有特定的值进行比较的场合
}