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

时间:2016-01-15 01:45:52

标签: java recursion

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

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行收到错误,说明&#34;无法访问的语句&#34;。在递归方面我没有看到问题,但是对于解决这个问题的任何帮助都将不胜感激。

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

3 个答案:

答案 0 :(得分:3)

您需要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;

答案 1 :(得分:1)

根据之前的评论,您需要一个使用纯递归的解决方案。因此,请尝试以下操作。请注意,它目前非常脆弱,因为它依赖于单词由一个空格字符分隔的事实。但如果你需要一个强大的解决方案,我们当然可以修改它。请参阅demo on 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;
    }
}

答案 2 :(得分:0)

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

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;
    }
}