关于java:编译问题 – 必须返回一个String

Compile problems — must return a String

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
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;
    }
}

编译问题:

Error: public String missingChar(String str, int n) {
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This method must return a result of type String


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

1
2
3
4
5
6
7
8
9
10
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;
}

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

  • 不要这样做。
  • 反转整个if逻辑

这将产生:

1
2
3
4
5
6
7
8
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应该是字符串的一个索引,但是将indexOfn进行比较绝对没有意义。同时,可能是n实际上是要删除的字符串中的字符,但是它的类型应该是char,如果在字符串中找不到字符,您应该进行一些错误处理。


错误很清楚/很简单

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

1
 if (str.length() < n){

修改方法,使您满足带有返回值的合同。

1
2
3
4
5
6
7
8
9
10
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;
  }
}

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


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