Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用case时使用break的替代方法_Java_Switch Statement - Fatal编程技术网

在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值运行代码,并检查结果。。。