Java 中的 switch
把整数 2 保存在名字 choice 下面。建一个 switch,列出 case 1、case 2 和 case 3——各自带自己的 println——再加上 default。编译并运行后,屏幕应显示一行 mid,因为 case 2 匹配。这一页教的就是:一个值,几个固定标签,一条选中的路径。
一个值,几个固定标签
创建一个小程序文件,名字叫 Dial.java。第一行的 public class 必须和文件名一致:public class Dial。不要在这个文件里保留旧的 Gate 或 Mint 类名;编译器要求类名和文件名一致。
在 main 里,先在 switch 之前保存一个整数:
int choice = 2;
这一行什么都不打印。它只是把值 2 交给名字 choice。choice 以小写 c 开头。2 周围没有引号。分号结束这一保存行。然后才是 switch 本身:
switch (choice) {
case 1:
System.out.println("low");
break;
case 2:
System.out.println("mid");
break;
case 3:
System.out.println("high");
break;
default:
System.out.println("none");
break;
}
单词 switch 是小写。圆括号里坐着名字 choice——Java 会拿它和每个 case 标签比较。每条 case 行以冒号结束,不是分号。case 2 下面是 System.out.println("mid");,然后是单词 break 和分号。当 choice 保存的是 2 时,Java 进入 case 2,打印 mid,碰到 break,离开整个 switch。这次运行里,case 3 和 default 都不会执行。编译前先保存文件。
打印 mid 的程序
这是你先编译的版本。choice 是 2,所以匹配的标签是 case 2。
public class Dial {
public static void main(String[] args) {
int choice = 2;
switch (choice) {
case 1:
System.out.println("low");
break;
case 2:
System.out.println("mid");
break;
case 3:
System.out.println("high");
break;
default:
System.out.println("none");
break;
}
}
}
在放着 Dial.java 的文件夹里运行 javac Dial.java。花括号、圆括号和冒号配对时,javac 自己不写任何一行。然后运行 java Dial——不是 java Dial.java。第二个命令不要带 .java 结尾。同样这两条命令在 Windows 和 macOS 上都适用;这一页不为任一系统要求不同的外壳拼写。程序应当打印 mid 并停下。它不会等你打字。如果终端在等键盘输入,说明文件里还留着旧练习的 nextLine 调用。删掉那个调用,保留 int 以及上面的 switch。屏幕行不对,也不需要重新安装 JDK。
为什么是 mid 而不是 low 或 high?因为圆括号里的值是 2,匹配的标签是 case 2。这次运行里,除非你专门为这个数字写 println,否则 Java 不会打印数字 2 本身。它打印的是匹配 case 下面 println 运行的内容。圆括号放被比较的值。这里每个 case 标签都是固定的整数。break 结束整个 switch,让后面的 case 保持安静。default 等着那些与任何 case 都不匹配的值——当 choice 是 2 时,default 不会用到。
当没有 case 匹配时
只改保存的值:
int choice = 9;
switch 结构保持原样。现在 case 1、case 2、case 3 都不匹配。Java 转到 default,运行 System.out.println("none");。屏幕上应出现一行 none。
public class Dial {
public static void main(String[] args) {
int choice = 9;
switch (choice) {
case 1:
System.out.println("low");
break;
case 2:
System.out.println("mid");
break;
case 3:
System.out.println("high");
break;
default:
System.out.println("none");
break;
}
}
}
再编译并运行:javac Dial.java,然后 java Dial。你应看到 none。你没有改写 case 行——只改了 choice 下面的值。看过 none 之后,可以把 int choice = 2; 放回去,回到第一个演示。两个版本都是合法的 Java。它们用同一种 switch 形状,一次教匹配的 case,一次教 default。
再按顺序读一遍 default 那次运行。choice 保存 9。switch (choice) 开始。case 1 不匹配。case 2 不匹配。case 3 不匹配。控制继续到 default。执行 println("none")。屏幕上只有一行。数字 9 本身不会出现,除非你故意打印它。
break 阻止后面的 case
break 不是装饰。没有它,匹配之后 Java 可以继续运行下一个 case 的行。这种落入(fall-through)会让初学者吃惊。这里有一个故意在 case 2 后漏掉 break 的短演示——单独试,或者在把它当作主课文件编译之前仔细读完:
public class Dial {
public static void main(String[] args) {
int choice = 2;
switch (choice) {
case 1:
System.out.println("low");
break;
case 2:
System.out.println("mid");
case 3:
System.out.println("high");
break;
default:
System.out.println("none");
break;
}
}
}
当 choice 等于 2 且 case 2 下没有 break 时,屏幕可以先显示一行 mid,下一行再显示 high。case 2 匹配了,打印了 mid,然后落入 case 3 又打印了 high。前面的教学演示在每个 case 下都保留 break,好让每条路径正好写一行。在把 Dial.java 重新当作保留的课文件之前,把 break 放回去。
让标签保持清楚的规则
被切换的值外面的圆括号是必需的。写成 switch choice { … } 而没有圆括号,会让 javac 报错。这一页的每个 case 标签都是整数常量:case 1:、case 2:、case 3:。标签后面跟冒号。写成 case 2; 用分号代替冒号,不是本课会编译的形状。default 后面没有值——只有 default:,然后是「什么都不匹配」时的那些行。
switch 和 if 不是同一种工具。if (ready) 问的是 true 还是 false。switch (choice) 把一个值与一份固定标签列表匹配。不要写带 boolean 的 switch (ready),也不要期待和 Gate.java 一样的课形。这一页的演示留在名叫 choice 的 int 和整数 case 标签上。像 if (score > 10) 这种比较,需要范围时仍属于 if;当值是离散且事先已知时,switch 更合适。
常见混淆是打印语法本身:System.out.println("switch (choice)");。那会写出字符 switch (choice)。它不会挑选 case。另一种混淆是在同一个 main 里留下 Gate 页的 if / else 演示,然后奇怪屏幕为什么显示 pass 而不是 mid。本课的 main 应只保留 int 和 switch。
📊 choice 与屏幕
| choice | 屏幕 |
|---|---|
| 1 | low |
| 2 | mid |
| 3 | high |
| 9 | none |
把表格当作运行之后的核对,而不是代替运行。第一个演示里 choice 为 2 打印 mid。第二个演示里 choice 为 9 打印 none。choice 为 1 打印 low。choice 为 3 打印 high。如果 choice 为 2 时 mid 和 high 都出现了,说明 case 2 下缺少 break——修好 break,不要重装 Java。
你现在能做什么
你可以保存一个整数,放进 switch (…),并为每个固定值写出带 println 和 break 的 case。当某个 case 匹配时,那一行会运行;当什么都不匹配时,default 会运行。下一页是 for:在那里,当计数器变化时,同一块行可以一遍又一遍地运行。
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部