java使用三种预驱动方法反向打印字符串?
我需要编写一个printBackwards()
方法,使用三个预先给定的方法first
、rest
和length
printBackwards()
方法需要将字符串作为参数,并在控制台上打印该字符串的每个字母,但每个字母都需要以相反的顺序打印在新行上。因此,如果字符串是House
,那么输出应该是:
e
s
u
o
H
在本练习中,我们应该使用递归和if-else语句。没有数组,没有其他(熟悉的)字符串方法,没有while和for循环
我做了一点,我知道这是不正确的,但这就是我努力做到的。我不知道如何编写代码,这样该方法就可以在字母e
之前返回字母这里如何使用递归
public class Recurse {
public static void main(String args[]){
System.out.println(printBackwards("House"));
}
//printBackward: takes a String as a parameter and prints letters of the String,
// one on each line, but backwards
public static String printBackwards(String s){
if (length(s) == 1){
return s;
} else {
return printBackwards(rest(s));
}
}
// first: returns the first character of the given String
public static char first(String s) {
return s.charAt(0);
}
// last: returns a new String that contains all but the
// first letter of the given String
public static String rest(String s) {
return s.substring(1, s.length());
}
// length: returns the length of the given String
public static int length(String s) {
return s.length();
}
}
# 1 楼答案
首先,需要在
printBackwards
函数中打印输出,因此main将如下所示:第二,是递归的工作方式。如果你想让它按升序执行,你应该在self函数调用之前做一些事情。否则,如果执行顺序是降序的,代码应该在自调用函数之后执行。这些是递归函数的基本原理
在这种情况下,让我们尝试构建答案
首先,我们需要处理停止条件,它应该总是写在自调用函数之前。最好也是最常见的停止条件是到达某个东西的结尾,在这种情况下,当我们得到一个空字符串时,在所有其他情况下,我们需要稍微改变一下调用self函数,在这种情况下,它将向函数提供字符串的其余部分:
当您到达stop递归语句时,从这一点开始,它将关闭所有打开的自函数执行,因此将返回
这是我们需要实现的完美状态,向后打印字母,因为在
printBackwards
执行的每个状态中,我们都从左边的字母中切下了字符串,这意味着第一个字母就是我们需要的字母例如,在字符串
House
的情况下,printBackwards
函数的最后一次调用将在s
变量将保持e
值时进行,因为当我们达到停止条件时,它是从被截断到空字符串的一个分支。在本例中,我们希望将其打印出来,但在此之前的self调用中,s
变量将保存值se
,因为这是剪切第一个字母之前的一步。所以,我们不想打印整个值,只想打印它的第一个字母,如下所示:将一切结合在一起,将导致以下实施:
希望,我解释得很清楚
祝你好运
# 2 楼答案
因为这是一个家庭作业问题,我会尽可能多地留给你,这样你就可以学习了
考虑这两个事实:使用这两个事实就足以构建递归方法
第二点。是终止条件。最好先编写代码
第一点。是主方法体,其中打印其余的是使用递归完成的
一旦有了终止条件和递归结构(通常是预序或后序操作),就可以构建递归方法
还请注意方法的名称打印向后()(而不是向后())。也就是说,方法进行打印;它不会向后返回字符串
因此,将上述内容转换为伪代码(在本例中,它实际上是的代码):