【发布时间】:2016-01-04 10:13:50
【问题描述】:
我在尝试填充我的 3D 链接列表时遇到堆栈溢出。我不明白为什么它没有在指定的范围内停止,它只是永远运行。这可能是一个简单的错误,我只是不明白。
编辑:好的,我现在已经更新了代码并删除了那个愚蠢的错误,但是它仍然没有完全按预期运行。它似乎确实在生成 10x10x10 列表,但是它无限运行。用 (10, 10, 10) 初始化,它应该创建 10000 个对象并停止。我只是想创建一个列表来表示一个 3d 坐标平面,每个整数坐标是一个节点,可以通过方向指针北、南、东、西、上或下访问。
任何帮助表示赞赏
public class Main {
public static void main(String[] args) {
NodeController3D con = new NodeController3D(6,6, 6);
}
}
public class Node3D {
// public Node3D(Node3D... nodes) {
// if (nodes.length != 5) {
// throw new RuntimeException();
// }
// this.nodes = nodes;
// }
public Node3D[] nodes;
public int x, y, z;
public Node3D north() {
return nodes[0];
}
public Node3D south() {
return nodes[1];
}
public Node3D east() {
return nodes[2];
}
public Node3D west() {
return nodes[3];
}
public Node3D up() {
return nodes[4];
}
public Node3D down() {
return nodes[5];
}
}
public class NodeController3D {
public NodeController3D(int length, int width, int height) {
HEAD = new Node3D();
pnc(HEAD, length, width, height);
}
private void pnc(Node3D node, int xMax, int yMax, int zMax) {
if(node.nodes == null) {
node.nodes = new Node3D[5];
}
if (node.x < xMax) {
Node3D newNode = node.nodes[2] = new Node3D();
newNode.x = node.x + 1;
newNode.y = node.y;
newNode.z = node.z;
System.out.println(newNode.x + ", " + newNode.y + ", " + newNode.z);
pnc(newNode, xMax, yMax, zMax);
}
if (node.y < yMax) {
Node3D newNode = node.nodes[0] = new Node3D();
newNode.x = node.x;
newNode.y = node.y + 1;
newNode.z = node.z;
pnc(newNode, xMax, yMax, zMax);
}
if (node.z < zMax) {
Node3D newNode = node.nodes[4] = new Node3D();
newNode.x = node.x;
newNode.y = node.y;
newNode.z = node.z + 1;
pnc(newNode, xMax, yMax, zMax);
}
}
// public NodeController3D(int radius) {
//
// }
public final Node3D HEAD;
}
编辑:好的,我现在已经更新了代码并删除了那个愚蠢的错误,但是它仍然没有完全按预期运行。它似乎确实在生成 10x10x10 列表,但是它无限运行。用 (10, 10, 10) 初始化,它应该创建 10000 个对象并停止。我只是想创建一个列表来表示 3d 坐标平面,每个整数坐标都是一个节点,可以通过方向指针访问。
【问题讨论】:
-
粘贴您的堆栈跟踪。
-
已更新。它重复了这两行
-
由于移除包装,行号不对应,我将行号添加到违规行的代码中
标签: java list recursion nodelist