Java程序在初始化字符串的第一个递归级别终止

Java程序在初始化字符串的第一个递归级别终止,java,string,recursion,terminate,Java,String,Recursion,Terminate,编辑2:已解决。没什么特别的,只是一个错误的for循环。对不起。 这是我的第一个问题。我目前正在开发一个GUI,以便为某个导入器软件更容易地创建config.xml,并且我已经基本上为xml编写了一个具有某些限制的数据结构。长话短说,我试图编写一个方法来替代toString,它递归地打印格式良好的所有数据。好吧,只要我不进入递归,一切都按计划进行。但一旦我启用它 代码如下: private String details(boolean recursiveDetails, int tabs) {

编辑2:已解决。没什么特别的,只是一个错误的for循环。对不起。

这是我的第一个问题。我目前正在开发一个GUI,以便为某个导入器软件更容易地创建config.xml,并且我已经基本上为xml编写了一个具有某些限制的数据结构。长话短说,我试图编写一个方法来替代toString,它递归地打印格式良好的所有数据。好吧,只要我不进入递归,一切都按计划进行。但一旦我启用它

代码如下:

private String details(boolean recursiveDetails, int tabs) {

    if(recursiveDetails) System.out.println("DEBUG: launched details method with depth="+tabs);
    String toStr = space(tabs)+"|============ <"+name+"> ============\n";
    //recursion never reaches this point.
    if(recursiveDetails) System.out.println("Debug check 1: before recursion with depth="+tabs);
    int endlength = 28+name.length();
    toStr += (space(tabs)+"| Parent: "+ parent +"\n");
    if(contentString!=null && !contentString.equals(""))
        toStr += (space(tabs)+"| Content String: \n|    " + contentString+"\n");
    toStr += (space(tabs)+"| Attributes: " + ((allAttr==null||allAttr.size()==0) ? "---" : "") + "\n");
    for(Attribute a : allAttr)
        toStr+=(space(tabs)+"|   "+a+"\n");
    toStr += (space(tabs)+"| Content: " + ((content==null || content.size()==0) ? "---" : "") + "\n");
    //recursion!
    for(Element e : content) 
        toStr+=(space(tabs)+"|" + (recursiveDetails ? e.details(true,tabs+1) : ("   "+e)) + "\n");
    if(recursiveDetails) System.out.println("Debug check 2: after recursion with depth="+tabs);
    toStr += space(tabs)+"|";
    for(int i=0; i<endlength; i++) 
        toStr+="=";
    return toStr;
}

private String space(int tabs) {
    String res="";
    for(int i=0; i<tabs; tabs++)
        res+="   ";
    return res;
}
但一旦我用递归细节=true运行它,我就会得到:

DEBUG: launched details method with depth=0
Debug check 1: before recursion with depth=0
DEBUG: launched details method with depth=1
使用断点,我发现一切都很好,直到println之后的第一行。如果我将该行注释掉,程序将在下一行终止,依此类推。没有例外,没有任何东西,没有更多的打印

我尝试使用StringBuilder,将所有
+
替换为
.append()
。我也尝试过避免使用
a?b:c
运算符,改用经典的
if
s。结果完全相同

谁能给我解释一下吗


编辑:我正在使用Java 8 OpenJDK amd64在Ubuntu16.04 Xenial上运行Eclipse Java Neon。

唯一的可能性是名称为null,因此name.length()抛出null指针异常,您的程序将终止。

方法中的
空格
循环错误。你有:

for(int i=0; i<tabs; tabs++)

用于(int i=0;i递归方法实际返回的字符串是什么?请使用调试器查找并返回给我们。这将更容易帮助您避免返回任何内容。程序在进入递归后立即终止并打印出
DEBUG:launched details method with depth=1
。如果算法未进入递归,则返回请提供一个MCVE()由于代码不应显示您当前编写的行为。符号===目前还可以。我可以在终止错误修复后立即找出确切的格式。当然,除非符号对整个困境负责,否则没有例外。它只是终止。这是奇怪的。或者是未终止抛出异常或JVM转储内核。真的没有其他可能性。@ScottSosna鉴于发布了正确的答案,并且存在另一种可能性,这现在很讽刺。好吧,这很尴尬。非常感谢。简单的
spaces
方法是我最不想看的地方。
for(int i=0; i<tabs; tabs++)