找不到其他类似的帖子,所以我不得不问。 打印任何东西都很容易...但是当您不被允许使用迭代方法时,事情就会变得棘手。
我的问题是我在一类中有两种方法。此类具有一个应反向打印的字符串。.使用迭代方法很简单,但是当char和int成为障碍时,则不是这样,
我试图将一个字符串中char的整数倍数计算为整数,然后使用另一种方法来获取相同的字符串和int数以反向打印出来。
注意:需要这两个以string和int为参数的方法。
我在做什么错?
public class PrintRecursive {
private static int j;
public static void main(String[] args) {
String str = "Hello Everyone!";
print(str, 0);
System.out.println(); // Line break
printReverse(str, 0);
}
private static void printReverse(String str, int i) {
char ch = (char) i;
if (ch == ' ') {
} else
while (str.contains(str)) {
i += str.charAt(ch);
}
}
private static void print(String str, int i) {
while (str.equals(i)) {
System.out.println(str.charAt(j--));
}
}
}
结果:
大家好! !enoyrevE olleH
也:请注意,我想我应该直接使用方法而不是我的“ private int j”。
我的代码atm不是递归的!!!!!但是我希望做到这一点,但我不知道这样做的方法。
答案 0 :(得分:1)
您可以执行以下操作:
public static void main(String[] args) {
printStringInReverse("Hello", "Hello".length() - 1);
}
public static void printStringInReverse(String s, int x) {
if (x < 0) {
return;
}
System.out.print(s.charAt(x));
printStringInReverse(s, x - 1);
}
请注意,我以if (x < 0)
开始该方法。这是一个“基本情况”,即停止递归的条件。然后,我在索引x
上打印char,然后再次调用该方法,但递减x
。这意味着下一个调用将在前面打印该字符。
实际上,此方法不需要具有int参数:
public static void printStringInReverse(String s) {
if (s.equals("")) {
return;
}
System.out.print(s.charAt(s.length() - 1));
printStringInReverse(s.substring(0, s.length() - 1), x);
}
第二种方法更类似于在Haskell之类的功能语言中使用递归的方式。
下次要求您编写递归方法时,这里有一些提示:
答案 1 :(得分:1)
这里有几个问题。首先,在print
方法中,通过在while循环条件下将字符串与整数进行比较来开始。另外,在while循环中,我相信您应该在此处使用变量j
,因为它已经传入,因此递减了变量i
。因此,这可能是您尝试使用{{1 }},
print
现在使用private static void print(String str, int i) {
while (i < str.length()) {
System.out.print(str.charAt(i++));
}
}
,首先将转换为int的int变量printReverse
转换为char并将其与i
进行比较。这样做是没有意义的,因为在进行字符强制转换后,传入的任何有效整数都将永远不等于' '
。我认为您打算在此方法中执行的操作与' '
几乎相同,但相反。因此,您需要更改的只是while循环和print语句,
print
请注意,如果要递归执行此操作,则需要建立一个基本案例和对函数的递归调用。例如,使用private static void printReverse(String str, int i) {
while (i < str.length()) {
System.out.print(str.charAt(str.length() - i++ - 1));
}
}
可以使基本案例与上面的while循环条件相同,在print
时停止调用print
,然后可以在之后对方法本身进行调用您已经在索引i >= str.length()
上打印了字符,同时又递增了i
,
i
相同的逻辑可以应用于private static void print(String str, int i) {
if (i >= str.length()){
return;
}
System.out.print(str.charAt(i++));
print(str, i);
}
,
printReverse
答案 2 :(得分:1)
递归方法(在每个递归步骤中打印一个字母)可能像这样:
private static void print(String s, int i) {
if(i == s.length() - 1)
System.out.println(s.charAt(i));
else {
System.out.print(s.charAt(i));
print(s, i+1);
}
}
private static void printReverse(String s, int i) {
if(i == 0)
System.out.println(s.charAt(0));
else {
System.out.print(s.charAt(i));
printReverse(s, i-1);
}
}
您可以这样称呼它:
public static void main(String[] args) {
print("abcd", 0);
printReverse("abcd", 3);
}
print()
传递整数0作为起始值,printReverse()
传递字符串的长度-1,即最后一个字母的索引。