我是编程新手,无法解决这个问题。我试过改变静态,以不同的方式调用方法,但仍然无法让它回调自身。程序的要点是让用户输入一个字符串,然后输出字符串的反向。
public class StringReverse
{
public static String reverse(String s)
{
int i = s.length()-1;
String letter = "";
if(i == 0)
{
return""; //Base Case for the recusive method.
}
else
{
return letter = s.substring(s.length() - 1) + reverse(s.substring(s.length() - 1));
}
}
public static void main(String[] args)
{
String input = "";
Scanner in = new Scanner(System.in);
do{
System.out.println("\nEnter q to quit.");
System.out.println("Enter a word...(No UpperCase letters)");
input = in.nextLine();
String reversedWord = reverse(input);
System.out.print(reversedWord);
}while(!input.equals("q"));
}
}
答案 0 :(得分:1)
我想你想这样做:
return letter = s.substring(s.length() - 1) + reverse(s.substring(0, s.length() - 1));
更新:
哦,还有:
int i = s.length();
答案 1 :(得分:1)
这是你的反转功能:
public static String reverse(String s)
{
if(s.length() <= 1)
{
return s;
}
else
{
return s.substring(s.length()-1) + reverse(s.substring(0,s.length()-1));
}
}
确保也检查null。
答案 2 :(得分:0)
致电时
s.substring(s.length() - 1)
你只用最后一个字符来调用它。效果不能是字符串反转。
答案 3 :(得分:0)
import java.util.Scanner;
public class JavaApplication3 {
public static String reverse(String s)
{
int i = s.length()-1;
String letter = "";
if(i == -1)
{
return"";
}
else
{
return letter = s.substring(s.length() - 1) + reverse(s.substring(0, s.length() - 1));
}
}
public static void main(String[] args)
{
String input = "";
Scanner in = new Scanner(System.in);
do{
System.out.println("\nEnter q to quit.");
System.out.println("Enter a word...(No UpperCase letters)");
input = in.nextLine();
String reversedWord = reverse(input);
System.out.print(reversedWord);
}while(!input.equals("q"));
}
}
这就是答案。这就是你做错了:
首先,你只返回了最后一个角色。 s.substring(int x)从位置x的字符到字符串的结尾。其次,因为你每次都做-1,你的基本情况应该是-1
答案 4 :(得分:0)
问题出在以下几行:
return letter = s.substring(s.length() - 1) + reverse(s.substring(s.length() - 1));
看来你正在返回最后一个字母以及在最后一个字母上调用reverse的值。我认为你真的想做一些像
这样的事情return letter = s.substring(s.length() - 1) + reverse(s.substring(0, s.length() - 1));
如果使用字符串“ABC”调用它,则第一次迭代会给出类似的内容:
"C" + reverse("AB")
答案 5 :(得分:0)
无需创建不必要的变量。简单明了。
public static String reverse(String s) {
if (s == null || s.length() < 1)
return "";
return s.substring(s.length() - 1) + reverse(s.substring(0, s.length() - 1));
}
答案 6 :(得分:0)
递归正在运行,但是您输入了错误的输入。这就是您想要的:
public static String reverse(String s)
{
int i = s.length()-1;
if(i == -1)
return "";
return s.substring(i) + reverse(s.substring(0, i));
}
你的工作原因有两个原因。一,通过测试i == 0而不是i == -1作为基本情况,你总是会切断后向字符串的最后一个字母。二,当你调用递归方法时,你只传入字符串的最后一个字符而不是除了字符串的最后一个字符。