有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swtch语句中的java不可访问代码

我已经用Java编写了以下方法。但我在包含return(Constants.SUCCESS)的行上收到错误消息unreachable code

如果我对该行进行注释,则不会收到错误消息。现在我的疑问是,如果我评论这行代码,为什么我没有收到错误消息?如果我对行进行注释,则不会向调用部分返回SUCCESS值。我认为应该有一个return语句,如果没有执行所有“if循环”和default,那么就没有return语句。我想最后一个return语句无论如何都会执行。我在结尾也尝试了return(Constants.SUCCESS)语句(注释行),但没有成功。 因此,为了返回成功,我是否需要在每个case语句下的每个“if”循环之后返回成功(为每个case语句创建“else”部分)

static int validateStartAndEndStringOrder(String startStr, String endStr, ArrayList<String> swaraPool, Constants.PatternType ptrnType) {
        switch (ptrnType) {
            case AROHA_INCREASING: {
                if (swaraPool.indexOf(endStr) < swaraPool.indexOf(startStr)) {
                    System.out.println("End string is before the start String");
                    return (-1);
                }
            }
            case AROHA_DECREASING: {
                if (swaraPool.indexOf(startStr) < swaraPool.indexOf(endStr)) {
                    System.out.println("End string is before the start String");
                    return (-1);
                }
            }
            case AVAROHA_INCREASING: {
                if (swaraPool.indexOf(endStr) < swaraPool.indexOf(startStr)) {
                    System.out.println("End string is before the start String");
                    return (-1);
                }
            }
            case AVAROHA_DECREASING: {
                if (swaraPool.indexOf(startStr) < swaraPool.indexOf(endStr)) {
                    System.out.println("End string is before the start String");
                    return (-1);
                }
            }
              default: {
                System.out.println("Invalid Enumeration Type");
                return(-1);
            }
              return (Constants.SUCCESS);
        }
//return (Constants.SUCCESS);
}

共 (3) 个答案

  1. # 1 楼答案

    默认部分包含

    {
        System.out.println("Invalid Enumeration Type");
        return(-1);
    }
    return (Constants.SUCCESS);
    

    你期待什么

  2. # 2 楼答案

    我怀疑您想在case块的末尾添加一个break;。否则,代码只是从上到下运行(就像代码中的任何其他地方一样)

    如果你放置一个break;,它将跳出switch块,这似乎是你想要的

    例如

           case AROHA_INCREASING: {
                if (swaraPool.indexOf(endStr) < swaraPool.indexOf(startStr)) {
                    System.out.println("End string is before the start String");
                    return (-1);
                }
                break; // without this, the thread will run the next case: block.
            }
    
  3. # 3 楼答案

    switch ... case 1 ... case n ... default覆盖所有控制路径(default将捕获所有剩余案例)。由于您显式地从每个块返回,因此程序控制无法超越switch

    您的编译器正在帮助发出错误

    switch块中的每个case之间使用break;语句将控制流移动到块的末尾