我正在尝试解决一个简单的问题,取一个字符串并反转字符串中单词的顺序。我的代码如下:
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,我可以在其中测试各个方法。
答案 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;
}
}