为啥编译器无法识别我的 return 语句?
Posted
技术标签:
【中文标题】为啥编译器无法识别我的 return 语句?【英文标题】:Why does the compiler not recognize my return statements?为什么编译器无法识别我的 return 语句? 【发布时间】:2019-03-20 08:42:27 【问题描述】:我有以下代码块:
public static boolean isReverse (String s1, String s2)
if((s1.length()==1)&&s2.length()==1)
if(s1.equals(s2))
return true;
else if(s1.charAt(0)==s2.charAt(s2.length()-1))
return isReverse(s1.substring(1, s1.length()-1),s2.substring(0, s2.length()-2));
else return false;
我了解通常您需要一个 return 语句来涵盖所有 if 语句都不为真的可能性。这就是为什么我最后有else return false
,但我仍然收到错误“必须返回布尔类型的结果”。这是我正在使用它的调用:
public static void main(String[] args)
if(isReverse("Java", "avaJ"))
System.out.println("worked");
【问题讨论】:
将else return false
更改为return false
。由于else
,您缺少返回路径
【参考方案1】:
在第一个if
有可能不会有return语句:
if((s1.length()==1)&&s2.length()==1)
//What if this is not true?
if(s1.equals(s2))
return true;
在此块中,如果s1
不等于s2
,那么它将跳出if
,并且由于最后一个return false;
链接到else
块,它将到达方法的末尾没有任何回报。
要解决此问题而不是 else return false
,只需 return false;
【讨论】:
【参考方案2】:第一个 if
有一个嵌套的 if
条件,这会导致您不返回任何内容的分支。您可以删除最后一个 else
并默认设置为 return false;
。或者简单地将嵌套的if
修改为 return
本身。也就是改这个
if((s1.length()==1)&&s2.length()==1)
if(s1.equals(s2))
return true;
to just (re-indented and suprafous parens removes)
if (s1.length() == 1 && s2.length() == 1)
return s1.equals(s2);
我们还可以在一行中使用StringBuilder
重新实现该方法,例如
public static boolean isReverse(String s1, String s2)
return new StringBuilder(s1).reverse().toString().equals(s2);
【讨论】:
【参考方案3】:public static boolean isReverse (String s1, String s2)
if(s1.length()==1&&s2.length()==1)
if(s1.equals(s2))
return true;
else
return false; // This portion need to be return some result.
else if(s1.charAt(0)==s2.charAt(s2.length()-1))
return isReverse(s1.substring(1, s1.length()-1),s2.substring(0, s2.length()-2));
else return false;
或者
public static boolean isReverse (String s1, String s2)
if(s1.length()==1&&s2.length()==1)
if(s1.equals(s2))
return true;
else if(s1.charAt(0)==s2.charAt(s2.length()-1))
return isReverse(s1.substring(1, s1.length()-1),s2.substring(0, s2.length()-2));
return false; // Just return the result without else
【讨论】:
以上是关于为啥编译器无法识别我的 return 语句?的主要内容,如果未能解决你的问题,请参考以下文章
安装了jdk ,配置了环境变量,都正确,为啥无法识别Java文件?