我在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);
}
答案 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);
你期待什么?