在Java中使用case时使用break的替代方法
是否有另一种方法可以跳过每种情况下的中断,并仅暗示当发现具有相同值的情况时,中断在Java中使用case时使用break的替代方法,java,switch-statement,Java,Switch Statement,是否有另一种方法可以跳过每种情况下的中断,并仅暗示当发现具有相同值的情况时,中断 int w=3; switch (w) { case 1: System.out.println("1"); break; case 2: System.out.println("2"); break; case 3: System.out.println("3p"); break; ca
int w=3;
switch (w)
{
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3p");
break;
case 4:
System.out.println("4");
break;
default:
System.out.println("csd");
break;
}
不,除非您想进入下一个案例标签,否则break不是可选的。好吧,除非你从箱子里回来或扔掉。但是继续读
如果要避免写入中断,可以使用If/else If/else结构:
if (w == 1) {
System.out.println("1");
} else if (w == 2) {
System.out.println("2");
} else if (w == 3) {
System.out.println("3p");
} else if (w == 4) {
System.out.println("4");
} else {
System.out.println("csd");
}
但是:一旦支持,您就可以使用开关表达式:
jep325是jdk12.0.2中的一个新特性,而jep354是jdk13中的一个预览特性。您可以像这样使用它编译代码:
javac --enable-preview --release 13 Example.java
java --enable-preview --release 13 Example
然后像这样运行它:
javac --enable-preview --release 13 Example.java
java --enable-preview --release 13 Example
JEP 325使用版本13,JEP 354使用版本14
除了上面的用法之外,开关表达式的有趣之处在于它们是生成值的表达式。有关详细信息,请参阅JEP。不,除非您想进入下一个案例标签,否则break不是可选的。好吧,除非你从箱子里回来或扔掉。但是继续读
如果要避免写入中断,可以使用If/else If/else结构:
if (w == 1) {
System.out.println("1");
} else if (w == 2) {
System.out.println("2");
} else if (w == 3) {
System.out.println("3p");
} else if (w == 4) {
System.out.println("4");
} else {
System.out.println("csd");
}
但是:一旦支持,您就可以使用开关表达式:
jep325是jdk12.0.2中的一个新特性,而jep354是jdk13中的一个预览特性。您可以像这样使用它编译代码:
javac --enable-preview --release 13 Example.java
java --enable-preview --release 13 Example
然后像这样运行它:
javac --enable-preview --release 13 Example.java
java --enable-preview --release 13 Example
JEP 325使用版本13,JEP 354使用版本14
除了上面的用法之外,开关表达式的有趣之处在于它们是生成值的表达式。有关详细信息,请参见JEP。这是解决问题的另一种方法,例如使用地图:
Map<Integer, String> map = Map.of(1, "1", 2, ....);
System.out.println(map.getOrDefault(w, "csd"));
注意:映射的语法来自Java 9+,您可以使用多种方法创建映射。这是解决问题的另一种方法,例如使用映射:
Map<Integer, String> map = Map.of(1, "1", 2, ....);
System.out.println(map.getOrDefault(w, "csd"));
注意:映射的语法来自Java 9+,您可以通过多种方式创建映射。我想我已经知道您在寻找什么:我尽量避免重复case和println值
通过这种方式,您只能明确地处理所需输出与w值不匹配的情况。我想我已经知道您在寻找什么:我尽量避免重复case和println值
通过这种方式,您只能明确地处理所需输出与w值不匹配的情况。请参阅。添加break是否会给您带来一些麻烦?您可以用自己的方法重构交换机,例如返回3p;,不间断;必需。@f_puras-这可能值得作为答案发布。我认为您不太清楚“break”在这里的作用。请参阅。添加break是否会给您带来一些麻烦?您可以用自己的方法重构交换机,例如返回3p;,不间断;必需。@f_puras-这可能值得作为答案发布。我认为您并不完全理解“break”在这里的作用。@user148382语法来自java 9或更高版本,只需在java 8之前搜索创建映射的方法,您就可以了,抱歉,我用手机回答您的问题。我有最新版本。@user148382如果您有最新版本,那么它应该可以工作,即使是第一个答案@YCF_L-:-如果你说的第一个答案是我的,那么他们也必须在JDK 13中预览它。收到一些反馈,将其推后发布。@user148382语法来自java 9或更高版本,只需在java 8之前搜索创建映射的方法,您就可以了,很抱歉,我会回答您的问题。我有最新版本。@user148382如果您有最新版本,那么它应该可以工作,即使是第一个答案@YCF_L-:-如果你说的第一个答案是我的,那么他们也必须在JDK 13中预览它。得到一些反馈,将其推后发布。虽然我有最新的Java,但它说:带有“->”的案例标签是一个预览功能,默认情况下被禁用。使用-启用预览以启用。我启用了它,但仍然不起作用。@user148382-谢谢。我已经添加了如何在JDK 12.0.2和JDK 13中使用它的详细信息。虽然我有最新的Java,但它说:带有“->”的案例标签是一个预览功能,默认情况下是禁用的。使用-启用预览以启用。我启用了它,但仍然不起作用。@user148382-谢谢。我已经添加了如何在JDK12.0.2和JDK13中使用它的细节。这个问题是实验性的,我想看看是否有任何有趣的方法来完成常见任务。您的回答表明您知道这些情况:1、2、4是无用的,这在实际实现中是已知的还是探索了一些没有用处的东西?我的意思是,像你那样加入一个小组就等于完全忽略了它们。如果我错了,请纠正我的错误,但在未知事件中处理与初始w匹配的情况将是最佳解决方案。谢谢我不能百分之百肯定我的想法是否解释正确:案例1、2和4绝不会被省略。事实上,我的代码应该和你的代码完全一样。通过一起处理上述案例,我表达了
如果w是1、2或4,则只输出w。由于默认情况已经分配给其他行为,我们不能在不破坏当前代码逻辑的情况下使用它。我们无法知道w的其他值可能会出现。顺便问一下:问题不总是实验性的吗?在任何情况下,你可能想检查这里的任何答案——其中有好的答案——是否足够好,足以让你接受。我认为你很接近,我的意思是你把1,2,4组合在一起,因为你知道它们不等于w。例如,如果w值来自用户的输入,您将如何准备?嗯,不完全是这样。我把你的w赋值作为一个可能值的例子。如果我可以依赖于w==3,那么整个代码就是System.out.println3p;,无条件地。也许你应该试着用不同的w值运行代码,并检查结果……这个问题是实验性的,我想看看是否有什么有趣的方法来完成常见任务。您的回答表明您知道这些情况:1、2、4是无用的,这在实际实现中是已知的还是探索了一些没有用处的东西?我的意思是,像你那样加入一个小组就等于完全忽略了它们。如果我错了,请纠正我的错误,但在未知事件中处理与初始w匹配的情况将是最佳解决方案。谢谢我不能百分之百肯定我的想法是否解释正确:案例1、2和4绝不会被省略。事实上,我的代码应该和你的代码完全一样。通过同时处理上述情况,我表达了隐式规则,如果w为1、2或4,则只输出w。由于默认情况已经分配给其他行为,我们不能在不破坏当前代码逻辑的情况下使用它。我们无法知道w的其他值可能会出现。顺便问一下:问题不总是实验性的吗?在任何情况下,你可能想检查这里的任何答案——其中有好的答案——是否足够好,足以让你接受。我认为你很接近,我的意思是你把1,2,4组合在一起,因为你知道它们不等于w。例如,如果w值来自用户的输入,您将如何准备?嗯,不完全是这样。我把你的w赋值作为一个可能值的例子。如果我可以依赖于w==3,那么整个代码就是System.out.println3p;,无条件地。也许你应该试着用不同的w值运行代码,并检查结果。。。