繁体   English   中英

无法访问的语句,递归(java)

[英]unreachable statement, recursion (java)

我正在尝试解决一个简单的问题,选择一个字符串并反转字符串中单词的顺序。 我的代码如下:

public class reverse
{
public static String rev (String a){
    String[] arr = a.split(" ");
    int count = arr.length;
    String result;
    if (count <= 1){
        result = arr[count];
        return result;
    }else{
        String temp = arr[count];
        return temp;
        result = rev(temp);
        count --;
    }
  }
}

我的困境是,在编译时,我在第13行收到一个错误,指出“ unreachable statement”。 在递归方面,我没有看到任何问题,但是对于解决此问题的任何帮助将不胜感激。

注意:我知道没有主要方法,我使用的是BlueJ IDE,可以在其中测试各个方法。

递归后,您需要return else块。 同样,数组从0开始, length - 1元素。 你可以做类似的事情,

int count = arr.length - 1;
if (count < 1) {
    result = arr[count];
} else { 
    String temp = arr[count];
    // return temp;
    result = temp + " " + rev(a.substring(0, a.lastIndexOf(' ')));
    // count--; // <-- updates local count uselessly.
}
return result;

根据前面的评论,您需要一个使用纯递归的解决方案。 因此,请尝试以下方法。 请注意,它目前非常脆弱,因为它依赖于单词被一个空格字符完全分隔的事实。 但是,如果您需要可靠的解决方案,我们当然可以对其进行修改。 请参阅IDEOne上演示

public static String rev (String a){
    int firstSpace = a.indexOf(' ');
    boolean multipleWords = (firstSpace != -1);

    if (!multipleWords) {
        return a;
    } else {
        String firstWord = a.substring(0, firstSpace);
        String remainingWords = a.substring(firstSpace + 1, a.length());
        String reversedRemainingWords = rev(remainingWords);
        String reversedWords = reversedRemainingWords + " " + firstWord;
        return reversedWords;
    }
}

这是一个修改后的答案,该答案使用子字符串而不是将其拆分为字符串数组。 我尚未对其进行测试,但我相信它会按预期工作。

public class reverse {
    public static String rev (String a){
        String result = "";
        if(a.contains(' ')){
            int i = a.lastIndexOf(' ') + 1;
            result = a.substring(i) + " " + rev(a.substring(0, i-1));
        }
        else{
            result = a;
        }
        return result;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM