一 单分支 if
语法:
if(条件表达式){
执行代码块;(可以有多条语句.)
}
说明:当条件表达式为 ture 时,就会执行{}
的代码。如果为false,就不执行特别说明;如果 {}
中只有一条语句,则可以不用写 {}
,但是建议写上 {}
代码演示
public static void main (String[] args) {
// 编写一个程序,可以输入人的年龄,如果输入的年龄大于 35,则输出:
// "你的年龄大于35,请不要投递简历/手动狗头"
// 思路分析:
// 1. 使用 Scanner 类,接收用户输入的年龄
// 2. 把 Scanner 类接收到的年龄,保存到变量 age
// 3. 判断 age 是否大于 35,如果大于 35,则输出提示信息
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的年龄:");
int age = scanner.nextInt();
if(age > 35) {
System.out.println("你的年龄大于35,请不要投递简历/手动狗头");
}
System.out.println("程序结束");
}
二 双分支 if-else
语法:
if(条件表达式){
执行代码块1;
} else {
执行代码块2;
}
说明:当条件表达式成立,即执行代码块1,否则执行代码块2.如果执行代码块只有一条语句,则 {}
可以省略,否则,不能省略
代码演示
public static void main (String[] args) {
// 编写一个程序,可以输入人的年龄,
// 如果输入的年龄大于 35,则输出:"你的年龄超过35,请不要投递简历/手动狗头"
// 如果输入的年龄小于 35,则输出:"你的年龄不超35,可以投递简历/手动狗头"
// 思路分析:
// 1. 使用 Scanner 类,接收用户输入的年龄
// 2. 把 Scanner 类接收到的年龄,保存到变量 age
// 3. 判断 age 是否大于等于 35,如果大于等于 35,则输出提示信息
// 4. 如果 age 不大于 35,则输出提示信息
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的年龄:");
int age = scanner.nextInt();
if(age >= 35) {
System.out.println("你的年龄超过35,请不要投递简历/手动狗头");
} else { // 双分支
System.out.println("你的年龄不超35,可以投递简历/^_^");
}
System.out.println("程序结束");
}
练习题
public static void main (String[] args) {
// 声明2个double变量,判断第一个数大于10.0,且第二个数小于20.0,打印两数之和
double n1 = 10.5;
double n2 = 25.5;
if (n1 > 10.0 && n2 < 20.0) {
System.out.println("n1 + n2 = " + (n1 + n2));
}
// 声明2个int变量,判断两个数之和是否能被3整除,且能被5整除
int n3 = 10;
int n4 = 20;
int sum = n3 + n4;
if (sum % 3 == 0 && sum % 5 ==0) {
System.out.println("n3 + n4 是 3 和 5 的公倍数");
} else {
System.out.println("n3 + n4 不是 3 和 5 的公倍数");
}
// 判断一个年份是否是闰年, 闰年的条件是符合下面二者之一:
// 1. 年份能被4整除,但不能被100整除
// 2. 能被400整除
int years = 2021;
if ( years % 4 == 0 && years % 100 != 0 || years % 400 == 0) {
System.out.println(years + "年是闰年");
} else {
System.out.println(years + "年不是闰年");
}
}
三 多分支
语法:
if(条件表达式1){
执行代码块1;
} else if(条件表达式2){
执行代码块2;
}
……
else {
执行代码块n;
}
特别说明:
(1)多分支 可以没有 else,如果所有的条件表达式都不成立,则一个执行入口都没有
(2)如果有 else,如果所有的条件表达式都不成立,则默认执行else代码块
代码演示
public static void main (String[] args) {
// 编写一个程序,输入 保国 同志的芝麻信用分:
// 如果:
// 1. 信用分在 1000 分以上,输出:信用极好
// 2. 信用分在 (750,999] 分时,输出:信用优秀
// 3. 信用分在 (600,749] 分时,输出:信用一般
// 4. 信用分在 (400,599] 分时,输出:信用较差
// 4. 其它情况,输出:信用不及格
// 思路分析:
// 1. 导入 Scanner 类
// 2. 使用 Scanner 类,接收用户输入的信用分
// 3. 把 Scanner 类接收到的信用分,保存到变量 score
// 4. 使用 if-else if-else 分支结构,判断 score 的值
// 5. 根据 score 的值,输出对应的提示信息
Scanner scanner = new Scanner(System.in);
System.out.println("请输入保国同志的芝麻信用分:");
int score = scanner.nextInt();
if (score >= 1 && score <= 1200 ) {
if (score >= 1000) {
System.out.println("信用极好");
} else if (score > 750 && score <= 999) {
System.out.println("信用优秀");
} else if (score > 600 && score <= 749) {
System.out.println("信用一般");
} else if (score > 400 && score <= 599) {
System.out.println("信用较差");
} else {
System.out.println("信用不及格");
}
} else {
System.out.println("输入的信用分范围错误,请重新输入");
}
scanner.close();
System.out.println("程序结束");
}
练习题
public static void main (String[] args) {
boolean flag = true;
if (flag == false) {
System.out.println("a");
} else if (flag) {
System.out.println("b");
} else if (!flag) {
System.out.println("c");
} else {
System.out.println("d");
}
}
输出结果:b
// 如果条件1改成 if(flag = false) 能编译通过吗?如果可以通缩输出结果是什么?
// 可以通过,结果是 c
四 嵌套分支
一个分支结构中又完整的嵌套了另一个完整的分支结构, 里面的分支的结构称为内层分支外面的分支结构称为外
层分支。 建议不超过3层
语法:
if() {
if(){
// if-else
} else {
// if-else
}
}
代码演示
public static void main (String[] args) {
// 参加歌手比赛,如果初赛成绩大于8.0进入决赛,否则提示淘汰。
// 并且根据性别提示进入男子组或女子组。
// 输入成绩和性别,进行判断和输出信息。
// 提示: double score; char gender
// 接收字符: char gender = scanner.next().charAt(0)
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩:");
double score = scanner.nextDouble();
if ( score >= 0.0 && score <= 10.0) {
if (score > 8.0) {
System.out.println("进入决赛");
System.out.println("请输入性别:");
char gender = scanner.next().charAt(0);
if (gender == '男') {
System.out.println("进入男子组");
} else if (gender == '女') {
System.out.println("进入女子组");
} else {
System.out.println("性别输入错误,请重新输入");
}
} else {
System.out.println("淘汰");
}
} else {
System.out.println("分数输入范围错误,请重新输入");
}
scanner.close();
System.out.println("程序结束");
}
练习题
public static void main (String[] args) {
// 出票系统:根据输入的淡旺季的月份和年龄,打印票价
/**
* 4-10月是旺季,
* 票价:成人(18-60):60元
* 儿童(0-18):半价
* 老人(60以上):1/3
* 1-3月是淡季:
* 票价:成人(18-60):40元
* 其他:20元
*/
Scanner scanner = new Scanner(System.in);
System.out.println("请输入月份:");
int month = scanner.nextInt();
System.out.println("请输入年龄:");
int age = scanner.nextInt();
if (month >= 1 && month <= 12) {
if (month >= 4 && month <= 10) {
if (age >= 18 && age <= 60) {
System.out.println("成人票价:60元");
} else if (age < 18) {
System.out.println("儿童票价:半价30元");
} else {
System.out.println("老人票价:20元");
}
} else {
if (age >= 18 && age <= 60) {
System.out.println("成人票价:40元");
} else {
System.out.println("票价:20元");
}
}
} else {
System.out.println("月份输入错误,请重新输入");
}
}
五 switch 分支结构
语法:
switch(表达式) {
case 常量1 :
语句块1;
break;
case 常量2 :
语句块2;
break;
...
case 常量n :
语句块n;
break;
default:
default语句块;
break;
}
代码演示
public static void main (String[] args) {
// 输入字符,判断星期几
Scanner scanner = new Scanner(System.in);
System.out.println("请输入字符(a-f):");
char ch = scanner.next().charAt(0);
switch (ch ){
case 'a':
System.out.println("星期一");
break;
case 'b':
System.out.println("星期二");
break;
case 'c':
System.out.println("星期三");
break;
case 'd':
System.out.println("星期四");
break;
case 'e':
System.out.println("星期五");
break;
case 'f':
System.out.println("星期六");
break;
case 'g':
System.out.println("星期日");
break;
default:
System.out.println("你输入的是其他字符");
}
System.out.println("退出switch,继续执行程序");
}
switch 细节
- 表达式数据类型,应和case 后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是 int
- switch(表达式)中表达式的返回值必须是:
(byte,short,int,char,enum[枚举],String)
- case子句中的值必须是常量,而不能是变量
- default子句是可选的,当没有匹配的case时,执行default
- break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会顺序执行到switch结尾,除非遇到break;
练习题
public static void main (String[] args) {
// 1. 从键盘输入一个字符,判断它是字母、转为大写字母,只转换 a b c d e 其它字符输出 other
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个字符:");
char ch = scanner.next().charAt(0);
switch (ch) {
case 'a':
System.out.println("A");
break;
case 'b':
System.out.println("B");
break;
case 'c':
System.out.println("C");
break;
case 'd':
System.out.println("D");
break;
case 'e':
System.out.println("E");
break;
default:
System.out.println("other");
}
// 2. 对学生成绩大于60分的,输出 合格;低于60分的,输出 不合格
// 成绩不能大于100,小于0 否则输出 输入的成绩不合法
// 思路分析
// 1. 使用switch语句,根据学生成绩的十位数进行判断
// 2. 编程思路:
// 2.1. 如果成绩在[60,100],(int)(成绩/60) = 1
// 2.2. 如果成绩在[0,60),(int)(成绩/60) = 0
// 2.3. 如果成绩不在[0,100],输出 输入的成绩不合法
System.out.print("请输入学生成绩:");
double score = scanner.nextDouble();
if (score >= 0 && score <= 100) {
switch ((int) (score / 60)) {
case 1:
System.out.println("合格");
break;
case 0:
System.out.println("不合格");
break;
default:
System.out.println("输入的成绩不合法");
}
} else {
System.out.println("输入的成绩不合法");
}
// 3.从键盘输入一个月份,输出该月份所属的季节
// 3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12,1,2 冬季
System.out.println("请输入一个月份:");
int month = scanner.nextInt();
if ( month >= 1 && month <= 12) {
switch (month){
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;
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
}
} else {
System.out.println("输入的月份不合法");
return;
}
scanner.close();
}