【问题标题】:recursive expand of strings递归展开字符串
【发布时间】:2015-02-16 11:33:36
【问题描述】:

我想创建一个用另一个字符串递归扩展输入字符串的方法。

public  class StringTest {
    public static String addZeichenkette(String out, int i)  {
        out += "bla";
        if (i > 0) {
            i--;
            addZeichenkette(out, i);
        }
        return out;
    }    

    public static void main(String[] args) {
        String out = "Hello";
        out = addZeichenkette(out, 7);
        System.out.println(out);
    }
}  

输出应该是:

Helloblablablablablablabla

而是

Hellobla

main 方法必须保持不变(方法调用除外)。

【问题讨论】:

  • 那么,您的问题是什么?为什么它必须是递归的?
  • 您遇到了什么问题?你试过什么?见:stackoverflow.com/help/on-topic
  • @MikeRylander 该函数不会多次添加字符串
  • 您正在丢弃递归调用的输出。你可以在addZeichenkette(out, i); 之前添加一个return 语句来解决这个问题。
  • 只是为了上下文,这里检查一下是因为(在写这篇文章的时候)log4j 错误,这里有很好的解释:youtube.com/watch?v=Opqgwn8TdlM

标签: java string function recursion expand


【解决方案1】:

需要返回累积(递归)的字符串:

 return addZeichenkette(out, i);

不仅仅是 i == 0 的那个。

public static String addZeichenkette(String out, int i) {
    return i > 0 ? addZeichenkette(out + "bla", --i ) : out;
}    

【讨论】:

    【解决方案2】:

    你忽略了递归调用的返回。

    public static String addZeichenkette(String out, int i) 
    {
        if (i > 0)
        {
            out += "bla";
            i--;
            out = addZeichenkette(out, i); 
    
        }
        return out;
    }    
    

    或者,您可以只返回结果addZeichenkette(out, i);,但两种方式都可以。


    正如您所指出的,您需要对其进行修改以避免添加i+1 bla's。因为当i = 0 时,我们不希望添加任何 bla,所以我们需要检查这一点。

    为此,我将bla 的串联移动到条件中。

    【讨论】:

    • 谢谢!很抱歉我在那里犯了一个小错误
    • 不用道歉,我们都会在这里或那里犯一些小错误:)
    • 它必须是 if (i > 1) 才能使其工作 i 次,否则它会添加 i+1
    • @s55michi 或将out += "bla"; 移动到if 代码块内。
    • @LuiggiMendoza 当i=0 时,您可能不希望添加任何内容,因此这确实是唯一明智的方法。除非你至少需要 1 bla。
    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 2013-04-06
    • 2017-10-28
    • 2011-11-16
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多