有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用三种预驱动方法反向打印字符串?

我需要编写一个printBackwards()方法,使用三个预先给定的方法firstrestlengthprintBackwards()方法需要将字符串作为参数,并在控制台上打印该字符串的每个字母,但每个字母都需要以相反的顺序打印在新行上。因此,如果字符串是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();
    }
}

共 (2) 个答案

  1. # 1 楼答案

    首先,需要在printBackwards函数中打印输出,因此main将如下所示:

    public static void main(String args[])
    {
        printBackwards("House");
    }
    

    第二,是递归的工作方式。如果你想让它按升序执行,你应该在self函数调用之前做一些事情。否则,如果执行顺序是降序的,代码应该在自调用函数之后执行。这些是递归函数的基本原理

    在这种情况下,让我们尝试构建答案
    首先,我们需要处理停止条件,它应该总是写在自调用函数之前。最好也是最常见的停止条件是到达某个东西的结尾,在这种情况下,当我们得到一个空字符串时,在所有其他情况下,我们需要稍微改变一下调用self函数,在这种情况下,它将向函数提供字符串的其余部分:

    if ( !length(s) )
    {
        //stop the recursion
        return;
    }
    else 
    {
        printBackwards(rest(s));
    }
    

    当您到达stop递归语句时,从这一点开始,它将关闭所有打开的自函数执行,因此将返回
    这是我们需要实现的完美状态,向后打印字母,因为在printBackwards执行的每个状态中,我们都从左边的字母中切下了字符串,这意味着第一个字母就是我们需要的字母
    例如,在字符串House的情况下,printBackwards函数的最后一次调用将在s变量将保持e值时进行,因为当我们达到停止条件时,它是从被截断到空字符串的一个分支。在本例中,我们希望将其打印出来,但在此之前的self调用中,s变量将保存值se,因为这是剪切第一个字母之前的一步。所以,我们不想打印整个值,只想打印它的第一个字母,如下所示:

    System.out.println(first(s));
    

    将一切结合在一起,将导致以下实施:

    public static String printBackwards(String s)
    {
        if ( !length(s) )
        {
            //stop the recursion
            return;
        }
        else 
        {
            printBackwards(rest(s));
            System.out.println(first(s));
        }
    }
    

    希望,我解释得很清楚

    祝你好运

  2. # 2 楼答案

    因为这是一个家庭作业问题,我会尽可能多地留给你,这样你就可以学习了

    考虑这两个事实:

    1. 在打印完剩余之后,必须先打印字符
    2. 如果字符串为空,则不打印任何内容

    使用这两个事实就足以构建递归方法

    第二点。是终止条件。最好先编写代码
    第一点。是主方法体,其中打印其余的是使用递归完成的

    一旦有了终止条件和递归结构(通常是预序或后序操作),就可以构建递归方法

    还请注意方法的名称打印向后()(而不是向后())。也就是说,方法进行打印;它不会向后返回字符串

    因此,将上述内容转换为伪代码(在本例中,它实际上是代码):

    1. 如果字符串为空,则不执行任何操作
    2. 用字符串的其余部分调用self
    3. 打印第一个字符