gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:44:26 24 4
gpt4 key购买 nike

编辑 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;
}

recursiveDetails 在递归时为 true,tabs 只是用于缩进。 content 是一个 java.util.List,其类型与此方法所在的类 (Element) 相同,包含可变数量的 Element 对象。每个 Element 和 Attribute 对象都有一个有效的 toString() 方法。

如果我在小型测试结构上使用 recursiveDetails = false 运行该方法,我会得到:

|============ <Catalog> ============
| Parent: <ImportConfig>
| Attributes:
| [Str | Project="null"]
| [Int | Priority="null"]
| Content:
| <Entry>
| <Entry>
|===================================

但是一旦我使用 recursiveDetails = true 运行它,我就会得到:

DEBUG: launched details method with depth=0
Debug check 1: before recursion with depth=0
DEBUG: launched details method with depth=1

使用断点,我发现一切都运行良好,直到 println 之后的第一行。如果我注释掉该行,程序将在下一行终止,依此类推。没有异常(exception),没有任何事情,不再打印。

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

谁能给我解释一下吗?

编辑:我正在 Ubuntu 16.04 Xenial 上使用 Java 8 OpenJDK amd64 运行 Eclipse Java Neon。

最佳答案

spaces 方法中的循环是错误的。你有:

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

并且您几乎肯定希望将 tabs++ 替换为 i++。否则你的循环将无限期地运行

关于Java 程序在第一个递归级别终止,白色初始化一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40621865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com