在下面的代码中,当我评论休息时,当我写一个案例(说“开始”)时,它将打印下面输出的所有案例,意味着所有三行都被打印,当我写“停止”它打印两个输出“Mechine停止”和“没有给出命令”,为什么我需要在编译器搜索案例时给出break语句,如果匹配则打印相关输出。
import java.util.Scanner;
public class App{
public static void main(String args[]){
Scanner input = new Scanner(System.in);
String text = input.nextLine();
switch(text){
case "start":
System.out.println("Mechine Started");
break;
case "stop":
System.out.println("Mechine stopped");
break;
default:
System.out.println("No command given");
}
}
}
答案 0 :(得分:6)
为什么我需要在编译器搜索时给出break语句 例如,如果匹配则打印相关输出。
因为它是如何定义的。除非您明确break
请参阅JLS section 14.11并注意:
如果其中一个case常量等于表达式的值, 然后我们说案例匹配,以及之后的所有陈述 在开关块中匹配的案例标签(如果有的话)被执行 序列
它类似于C中的开关行为,注意。来自Wikipedia:
从C派生的语言,更常见的是受到影响的语言 Fortran计算了GOTO,而不是特征性的通过控制 移动到匹配的案例,然后继续执行("下降 通过")与下一个案例相关的陈述 源文本
答案 1 :(得分:1)
另一个兴趣点是break语句。每个break语句都会终止封闭的switch语句。控制流继续切换块后面的第一个语句。 break语句是必要的,因为如果没有它们,switch块中的语句就会失败:匹配的case标签之后的所有语句都按顺序执行,而不管后续case标签的表达式,直到遇到break语句为止。
答案 2 :(得分:0)
在switch语句中不使用 break 是 直通逻辑
switch语句没有说“你需要包含break”。
最佳做法是,在使用此逻辑时,您应添加评论 // fall-through 。