gpt4 book ai didi

Java - 列表的内容在递归中丢失

转载 作者:行者123 更新时间:2023-12-02 11:41:16 25 4
gpt4 key购买 nike

我目前正在编写一个小项目(这是这里具体解释的方式),除了一部分之外,我的一切都正常工作。我有一个按参数列出的 pZiegel ,该参数在递归中进行了修改。因为它不起作用,所以我做了一点调试,发现了问题:在某一时刻,列表在方法的末尾恰好包含一个数字。然后,程序向后跳转一个递归深度。之后,它就不再包含任何数字了。号码怎么丢了?列表作为参数与引用传递一起使用,所以它不应该只是拒绝它,对吗?

public void erstelleBaum (Tree pTree, List<Integer> pZiegel, List<Integer> pFugen, int tiefe) { 
if (tiefe / n >= maxHoehe) {
System.out.println("hi");
mauerGefunden = true;
alleFugen = pFugen;
}
if (!mauerGefunden) {

pZiegel.toFirst();
while (pZiegel.hasAccess() && !mauerGefunden) {
boolean ziegelHinzufügen = false;
möglich = true;
aktZiegel = pZiegel.getContent();

// ...

if (möglich) {

// ...

pZiegel.remove();

if (pZiegel.isEmpty()) {
ziegelHinzufügen = true;
pZiegel = new List();
for (int i = 1; i <= n; i++) {
pZiegel.append(i);
}
}


// Recursion
erstelleBaum(neuesBlatt, pZiegel, neueFugen, neueTiefe);

// Here, it tells me that pZiegel is empty (at recursion depth 17)

if (ziegelHinzufügen) {
pZiegel.toFirst();
while (pZiegel.hasAccess()) {
pZiegel.remove();
}
pZiegel.append(aktZiegel);
}
else {

pZiegel.toFirst();
while (pZiegel.hasAccess() && pZiegel.getContent() < aktZiegel) {
pZiegel.next();
}
if (pZiegel.hasAccess()) {
pZiegel.insert(aktZiegel);
pZiegel.toFirst();
while (pZiegel.getContent() != aktZiegel) {
pZiegel.next();
}
}
else {
pZiegel.toLast();
pZiegel.append(aktZiegel);
pZiegel.toLast();
}
}
}
pZiegel.next();
}
}
// Here, pZiegel contained one number (at recursion depth 18)
}

我希望代码不会太困惑。我试图排除不涉及 pZiegel 的部分。抱歉,这些变量是用德语命名的。我不想在这篇文章中更改它们,因为我知道我会忘记更改代码中的某些内容。

如果有不清楚的地方,请随时询问。

最佳答案

我相信pZiegel列表引用在某些时候会丢失。您应该检查pZiegel对象ID(检查对象时显示的数字)以确保它在所有递归中都是相同的List实例。

请注意,代码中有一部分使 pZiegel 标识符引用新列表:

...
if (pZiegel.isEmpty()) {
ziegelHinzufügen = true;
pZiegel = new List(); // <---- this line
for (int i = 1; i <= n; i++) {
pZiegel.append(i);
}
}
...

我相信您正在使用 pZiegel 引用一个列表(可能为空)来调用第 18 次递归。在第 18 个递归中,该行被调用,pZiegel 开始引用一个新列表(意识到最后一个列表仍然存在,并由第 17 个递归的 pZiegel 标识符引用)。在第 18 次递归调用的最后一行,您认为正在检查与第 17 次递归相同的 pZiegiel 列表,但事实并非如此。

关于Java - 列表的内容在递归中丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48527081/

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