gpt4 book ai didi

java - 创建自定义列表数据结构时可能出现逻辑错误

转载 作者:行者123 更新时间:2023-12-02 10:02:52 26 4
gpt4 key购买 nike

我正在尝试为作业创建一个与列表最相似的自定义数据结构。我已经创建了 Node 类:

 class Node {   
int data;
Node nextNode = null;

public Node(int data) {
this.data=data;
}
}

和 DataStructure 类:

public class DataStructure {
private Node previousNode;
private Node StartingNode;
private boolean isEmpty = true;

public void AddNode(int data) {
if(isEmpty) {
isEmpty = false;
StartingNode = new Node(data);
previousNode = StartingNode;
}
else {
previousNode.nextNode = new Node(data);
previousNode = previousNode.nextNode;
}
}

private boolean isFirst = true;
int max = 0;
public int getMaxData(Node d) {
if(isFirst) {
isFirst = false;
max = d.data;
}
else {
if(d.data > max)
max = d.data;
if(d.nextNode != null)
getMaxData(d.nextNode);
}
return max;
}
}

当我尝试运行上面的示例时,列表未正确创建(据我所知)。我一直在想这可能与垃圾收集有关,但我相信节点对象仍然处于 Activity 状态,因为它们被 nextNode 变量引用。

这是运行示例的主要方法:

public static void main(String [] args) {
DataStructure list = new DataStructure();
list.AddNode(5);
list.AddNode(15);
list.AddNode(12);
list.AddNode(3);

System.out.println(list.getMaxData(list.StartingNode));
}

预期结果是要打印的数字 15,但我只得到第一个节点 (5)。我尝试通过在 getMaxData() 开头添加 System.out.writeln(d.data) 来进行“调试”,但只打印了 5 个,所以我相信其他节点没有创建。

最佳答案

这个问题是这样的:

if(isFirst) {
isFirst = false;
max = d.data;
} else {...}

if 总是发生在第一个元素上,然后您只需返回该值。您只需使用 else 子句即可做到这一点:

public int getMaxData(Node d) {
if (d.data > max)
max = d.data;
if (d.nextNode != null)
return getMaxData(d.nextNode);
return max;
}

关于java - 创建自定义列表数据结构时可能出现逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55506015/

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