帮助编写void reverse()方法并使用递归来反转一个完整的句子(Java)

时间:2009-12-08 19:58:24

标签: java reverse

我已经编写了一些删除字符串的第一个字符并将其放在剩余的子字符串之后然后将其打印出来的内容,指令是通过删除句子的第一个字母并将其连接到句子来使用递归来反转句子。反转的剩余子串,即。 “你好”产生“olleH”。但我不知道递归部分,任何帮助将不胜感激,谢谢。这是我的代码:

public class Sentence {

   private String sentence;

   public Sentence(String astring) {
      sentence = astring;
   }

   public void reverse(){

   String firstChar = sentence.substring(0,1);

   String remainingSen = sentence.substring(1,sentence.length());

   System.out.println(remainingSen+firstChar);  
  }
}

4 个答案:

答案 0 :(得分:1)

看到这是一项家庭作业,我会给出一些提示:

  • 一个递归方法调用自己来完成部分工作
  • reverse()方法采用String参数并返回字符串的反转版本可以自行调用。
  • 如果删除第一个字符并将其添加到左侧翻转的末尾,则表明您的工作已完成。

如果你弄清楚上面的提示,你应该已经解决了你的问题: - )

答案 1 :(得分:1)

通常,如果要编写递归函数,则将在其自身内调用函数。例如:

void fn() {
    fn() 
}

这个例子显然是一个无限循环。

在您的情况下,您想要反复调用反向函数,直到达到已定义的状态(Hello转换为olleH)。

public class Sentence {

  private String sentence;

  // ... etc ...

  public void reverse() {
      // Base Case: When do you want this to end? This statement is designed
      // to end the recursion when a desired state is reached

      // some sort of string manipulation (which you have already worked on)

      // call reverse() to continue the 'looping' until 
      // a desired _case_ is reached
  }
}

我认为这是一个家庭作业问题,很快就会到期,所以我不打算提供准确答案......

更新1 :我修改了反向示例以匹配表达的约束。

答案 2 :(得分:0)

你了解递归的概念吗?如果是这样,找出基本情况(将停止递归的条件)以及您希望在每个递归步骤中执行的操作。提示:你需要一个递归方法,它将字符串反转并返回反向字符串。不会直接回答问题,但这应该让你开始。

编辑:(还有一个提示)不要试图使void reverse()方法递归。让它调用一个实际上可以进行反转的不同的私有递归方法。

答案 3 :(得分:0)

public void reverse()
{
    if(text.length() > 0)
    {
        String first = text.substring(0,1);
        String remaining = text.substring(1);

        Sentence shorter = new Sentence(remaining);
        shorter.reverse();

        text = shorter.text + first;
    }
}