【问题标题】:How do I fix this Line 40: error: missing return statement } [duplicate]我该如何修复第 40 行:错误:缺少返回语句} [重复]
【发布时间】:2022-11-30 06:22:11
【问题描述】:

给定一个仅包含字符 '('、')'、'{'、'}'、'[' 和 ']' 的字符串 s,确定输入字符串是否有效。

如果满足以下条件,则输入字符串有效:

开括号必须由相同类型的括号闭合。 打开的括号必须以正确的顺序关闭。 每个闭括号都有一个对应的相同类型的开括号。

这是我的代码,它在我的 IDE 中运行良好,但是一旦我提交它,它就会给我 “第 40 行:错误:缺少返回语句 } ^"

class Solution {
    public boolean isValid(String s) {
        Stack <Character> stack = new Stack<Character>();
        
        HashMap<Character, Character> openClose = new HashMap<Character, Character>();
        
        openClose.put('(', ')');
        openClose.put('{', '}');
        openClose.put('[', ']');
        
        
        if(s.length()==1) {
            return false;
        }

        for(int i=0; i<s.length(); i++) {                   
            if(stack.empty()==true && i<s.length()) {
                if(s.charAt(i)==')'||s.charAt(i)=='}'||s.charAt(i)==']') {
                    return false;
                }
                stack.push(s.charAt(i));
            }
            if(s.charAt(i)==openClose.get(stack.peek())){
                stack.pop();
            }
            else if (openClose.containsKey(s.charAt(i))){
                stack.push(s.charAt(i));
            }
            else {
                return false;
            }
            if(i>=s.length()-1) {
                return true;
            }
            else return false;
        }
    }
}

我只是想让它编译。在 IDE 中它按预期编译和运行,但是一旦我提交它,它就会返回一个错误。

【问题讨论】:

  • 您缺少 s 为空时的返回语句。
  • 因为您缺少返回语句。您的 for 循环可能永远不会进入。那应该返回什么?我强烈建议您为您的方法遵循一个入口点和一个出口点(而不是多个 return 语句)。
  • if (i &gt;= s.length() - 1) return true; else return false;可以简化为return i &gt;= s.length() - 1;,后者又可以简化为return false;,因为s.length()至少为2。
  • 楼主,请注意这个或类似的问题已经在这个网站上被问过很多次了,为了你和我们的利益,你会想学习如何用谷歌搜索这个网站,然后在提问之前先搜索。例如:site:stackoverflow.com java missing return if for while

标签: java


【解决方案1】:

您需要从此方法返回一个布尔结果。目前所有的返回语句都是有条件的。

您可以简单地在方法末尾返回 false(如果不满足其他条件,则假设失败)

【讨论】:

    【解决方案2】:

    请注意,如果您的 for 循环完成而没有从内部返回,则没有 return 语句。所以在你的for loop 之后放一个。

    【讨论】:

    • 循环总是在第一次迭代时返回。
    • @shmosel 编译器不知道。这是一个编译器错误(尽管 OP 认为如此)。查看它报告的错误消息。
    • 这是一个编译器错误,因为可能没有进入循环。改成while (true)就可以了。
    【解决方案3】:

    将“else return false”替换为外括号,并删除else。

    像这样:

     if(i>=s.length()-1) {
                return true;
            }
        }
        return false;
    }
    

    我认为这只是一个未关闭/放错了位置}

    【讨论】:

      猜你喜欢
      • 2013-03-21
      • 2016-01-04
      • 2021-08-16
      • 2021-05-27
      • 2014-01-09
      • 2013-10-27
      • 1970-01-01
      • 2020-05-28
      • 2014-06-06
      相关资源
      最近更新 更多