switch语句中无法访问的代码

时间:2014-09-01 12:57:38

标签: java

我在Java中编写了以下方法。但是我在包含return(Constants.SUCCESS);

的行上得到错误消息无法访问的代码

如果我评论该行,我不会收到错误消息。现在我的疑问是,如果我评论该行,我不会收到错误消息?如果我对该行进行注释,则对于调用部分没有SUCCESS的返回值。我认为应该有一个return语句,如果所有“if循环”和默认值都没有执行则没有。我认为最后的return语句无论如何都会执行。我在最后也尝试了返回(Constants.SUCCESS)语句(注释行),但没有运气。 因此,为了返回成功,我需要在每个case语句下的每个“if”循环之后返回成功(为每个语句创建“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 个答案:

答案 0 :(得分:2)

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

您的编译器有助于发出错误。

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

答案 1 :(得分:1)

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

如果您放置break;,它会跳到switch区块之外,这似乎是您想要的。

e.g。

       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.
        }

答案 2 :(得分:1)

您的默认部分包含

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

你期待什么?