【问题标题】: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,您缺少返回路径

标签: java string methods boolean logic


【解决方案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
      }
      

      【讨论】:

        猜你喜欢
        • 2017-09-06
        • 2019-04-12
        • 1970-01-01
        • 1970-01-01
        • 2020-12-14
        • 2023-03-25
        • 2012-12-14
        • 1970-01-01
        相关资源
        最近更新 更多