使用void reverse()方法(Java)递归反转句子

时间:2014-06-01 23:33:00

标签: java

测试者类是:

public class SentenceWithReverseTester
{
    public static void main(String[] args) 
    {
        String[] list = new String[]{"aba", 
                                     "Madam, I'm Adam", 
                                     "nut", 
                                     "A man, a plan, a canal, Panama", 
                                     "wonderful", 
                                     "Go hang a salami, I'm a lasagna hog", 
                                     "race car", 
                                     "1", 
                                     "", 
                                     "zero", 
                                     "@!:"} ;
        for (String line : list) {
            SentenceWithReverse sentence = new SentenceWithReverse(line) ;
            sentence.reverse() ;
            System.out.println(line + "       reversed becomes........") ;
            System.out.println(sentence.toString()) ;
            System.out.println("----------------------------") ;
        }
    }
}

对于我的反向方法:

public void reverse()
{
    String s = super.toString();
    if(s.length() > 0)
    {
        String first = s.substring(0,1);
        String remaining = s.substring(1, s.length());
        SentenceWithReverse shorter = new SentenceWithReverse(remaining);
        shorter.reverse();
        System.out.println(shorter + first);
    }
}

我没有得到我想要的结果,而且我不确定我在这里做错了什么。

2 个答案:

答案 0 :(得分:3)

您应该让reverse()实际返回String,而不是void,以便您可以使用撤消的结果。因此,请在方法声明中将void更改为String。那么你在方法中需要一些return语句 - 一个用于基本案例,一个用于递归案例。

在递归的情况下,return语句将类似于

return shorter.reverse() + first;

也就是说,你采用较短句子的反向,并将第一个字符放回到最后。

在基本情况下,也就是说,方法的输入是"",你可以写

return "";

我将留给您,以确定在您的方法逻辑中插入这两个return语句的位置。祝你好运。

答案 1 :(得分:-1)

您未在reverse方法中分配任何成员字段。你没有显示你有哪些字段,但我猜你有一个从toString返回的字符串字段。您应该将shorter + first分配给System.out.println来电。