【问题标题】:Compile problems -- must return a String [duplicate]编译问题——必须返回一个字符串[重复]
【发布时间】:2017-06-14 17:21:46
【问题描述】:

我正在处理一个编码问题,并试图从字符串中删除一个字符并返回一个没有该字符的字符串。下面是我的代码。请告诉我它有什么问题,因为我不断收到一条错误消息,说它必须返回一个字符串。

public String missingChar(String str, int n) {
    if (str.length() < n) {
        int idx = str.indexOf(n);
        String a = str.substring(0,idx);
        String b = str.substring(idx+1, str.length());
        return a + b;
    }
}

编译问题:

错误:public String missingChar(String str, int n) {
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 此方法必须返回字符串类型的结果

【问题讨论】:

  • 如果str.length() &gt;= n,你什么都不返回……
  • 你需要某种else return ...;

标签: java string methods


【解决方案1】:

即使不满足str.length() &lt; n条件,你也需要返回String

public String missingChar(String str, int n) {
    if (str.length() < n) {
        int idx = str.indexOf(n);
        String a = str.substring(0,idx);
        String b = str.substring(idx+1, str.length());
        return a + b;
    }

    return str;
}

【讨论】:

    【解决方案2】:

    正如其他答案和我的评论已经提到的那样,您的代码在 else 情况下缺少 return 语句。但是你的代码逻辑也有很大缺陷:

    • 不要做int idx = str.indexOf(n);
    • 反转整个 if 逻辑

    这将产生:

    public String missingChar(String str, int n) {
        if (n < str.length()){
            String a = str.substring(0,n);
            String b = str.substring(n+1, str.length());
            return a + b;
        } 
        return str;
    }
    

    对于给定的输入"hello", 1,这会导致输出hllo

    请注意,我假设您首先尝试将n 与字符串的长度进行比较的缺陷逻辑结果:将其与长度进行比较告诉我n 应该是字符串的索引- 但是用n 调用indexOf 绝对没有意义。同时,n 可能实际上是您要删除的字符串中的字符,但它的类型应该是char,并且您应该进行一些错误处理,以防在字符串中找不到该字符。

    【讨论】:

    • 非常感谢,好点子。我查看了我的代码,你说得对,我的代码没有意义。
    【解决方案3】:

    错误很清楚/很简单

    即使不满足此条件,您的方法也必须返回字符串

     if (str.length() < n){ 
    

    修改方法,使返回值符合约定。

    public String missingChar(String str, int n) {
      if (str.length() < n){
        int idx = str.indexOf(n);
        String a = str.substring(0,idx);
        String b = str.substring(idx+1, str.length());
        return a + b;
      }else{
           return something;
      }
    }
    

    【讨论】:

      【解决方案4】:

      问题是所有的返回路径都必须返回一个字符串,而这里你只在其中一个返回字符串...

      【讨论】:

        【解决方案5】:

        如果 str.length() >= n,则没有回报!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-03-23
          • 1970-01-01
          • 2011-08-28
          • 2013-12-04
          • 1970-01-01
          • 1970-01-01
          • 2018-09-14
          相关资源
          最近更新 更多