分支控制有三种:单分支,双分支,多分支。
单分支
基本语法:
if (条件表达式){
执行代码块;
}
程序示例:
import java.util.Scanner;
public class If01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("输入你的年龄:");
int age = sc.nextInt();
if (age > 18) {
System.out.println("你的年龄大于18。");
}
}
}
双分支
基本语法:
if (条件表达式) {
执行代码块1;
} else {
执行代码块2;
}
程序示例:
import java.util.Scanner;
public class If02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("输入你的年龄:");
int age = sc.nextInt();
if (age > 18) {
System.out.println("你已经超过18岁了。");
} else {
System.out.println("你还未成年。");
}
}
}
多分支
基本语法:
if (条件表达式1) {
执行代码块1;
}
else if (条件表达式2) {
执行代码块2;
}
......
else{
执行代码块n;
}
多分支最后可以没有 else。
如果没有 else,当前面的所有 if 都不成立时,将什么都不执行。
switch
switch(表达式) 中的表达式数据类型要么和 case 常量中常量的类型一致,要么是可以自动类型转换为可以进行比较的类型。
switch(表达式) 中的表达式的值的类型必须是以下类型中的一种:byte,short,int,char,enum(JKD 5 之后支持),String(JDK 7 之后支持)。
case 常量中的常量可以是常量表达式,即值为常量的表达式,如 'b' + 1
。case 标签还可以是字符串或枚举类型常量。
default 可以省略。
default 的位置随意。
多个 case 中的值不允许重复。
case 后面如果没有 break 将会穿透。如果多个 case 的语句体相同,则可以利用穿透来简化代码。
程序示例:
public static void main(String[] args) {
char c = 'a';
switch (c) {
case 10:
System.out.println("ok1");
break;
case 97: // 和此处匹配上
System.out.println("ok2"); // 输出 ok2
break;
default:
System.out.println("ok3");
break;
}
}
程序示例:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
// 从键盘输入学生成绩,如果学生成绩大于 60 则输出合格,否则输出不合格
// 要求用 switch 完成
System.out.println("输入学生成绩:");
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
switch (score / 60) {
case 0:
System.out.println("不合格");
break;
case 1:
System.out.println("合格");
break;
}
}
}
程序示例:
// 这是从 JDK12 开始引入的新特性,用花括号括起来的语句可以省略 break,因为不会发生穿透现象。
public class test {
public static void main(String[] args) {
int number = 1;
switch (number) {
case 1 -> {
System.out.println("一");
break;
}
case 2 -> {
System.out.println("二");
break;
}
case 3 -> {
System.out.println("三");
break;
}
default -> {
System.out.println("没有这种选项");
break;
}
}
}
}
省略 break:
public class test {
public static void main(String[] args) {
int number = 1;
switch (number) {
case 1 -> {
System.out.println("一");
}
case 2 -> {
System.out.println("二");
}
case 3 -> {
System.out.println("三");
}
default -> {
System.out.println("没有这种选项");
}
}
}
}
用花括号括起来的语句块只有一条语句时,可以省略花括号:
// 用花括号括起来的语句块只有一条语句时,可以省略花括号
public class test {
public static void main(String[] args) {
int number = 1;
switch (number) {
case 1 -> System.out.println("一");
case 2 -> System.out.println("二");
case 3 -> System.out.println("三");
default -> System.out.println("没有这种选项");
}
}
}
如果多个 case 的语句体相同,则可以利用穿透来简化代码。未简化的代码:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入星期数:");
int number = sc.nextInt();
switch (number) {
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;
}
}
}
利用 case 穿透进行简化:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入星期数:");
int number = sc.nextInt();
switch (number) {
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("休息日");
break;
default:
System.out.println("输入错误");
break;
}
}
}
进一步简化:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入星期数:");
int number = sc.nextInt();
switch (number) {
case 1, 2, 3, 4, 5:
System.out.println("工作日");
break;
case 6, 7:
System.out.println("休息日");
break;
default:
System.out.println("输入错误");
break;
}
}
}
更进一步简化:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入星期数:");
int number = sc.nextInt();
switch (number) {
case 1, 2, 3, 4, 5 -> System.out.println("工作日");
case 6, 7 -> System.out.println("休息日");
default -> System.out.println("输入错误");
}
}
}
与所有表达式类似,switch 表达式也有一个值,可以将 switch 的结果赋值给一个变量。
程序示例:
import java.util.Scanner;
public class SwitchDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个季节:");
String season = sc.next();
int numLetters = switch (season) {
case "spring", "summer", "winter" -> 6;
case "fall" -> 4;
default -> -1;
};
System.out.println(numLetters);
}
}
执行结果:
请输入一个季节:fall
4
switch 表达式中使用枚举常量时,不需要为各个标签提供枚举名,这可以从 switch 值推导得出。
程序示例:
public class SwitchDemo2 {
public static void main(String[] args) {
enum Size {
SMALL, MEDIUM, LARGE, EXTRA_LARGE
}
;
Size itemSize = Size.SMALL;
String label = switch (itemSize) {
case SMALL -> "S"; // no need to use Size.SMALL
case MEDIUM -> "M";
case LARGE -> "L";
case EXTRA_LARGE -> "XL";
}; // 在这个例子中,完全可以省略 default, 因为每一个可能的值都有相应的一个 case
System.out.println(label); // S
}
}
使用整数或 String 操作数的 switch 表达式必须有一个 default,因为不论操作数值是什么,这个表达式都必须生成一个值。
如果操作数为 null,会抛出一个 NullPointerException。
标签:case,System,break,println,分支,public,out From: https://www.cnblogs.com/Chengkai730/p/18390598