当我尝试在Java中创建n元树时,出现了IndexOutOfBound异常。
我已经尝试使用children.add(index,element)和children.add(element)方法,但是我仍然遇到相同的问题。
// Node
import java.util.ArrayList;
import java.util.List;
public class Nodo_m_ario {
protected Nodo_m_ario parent;
protected List<Nodo_m_ario> children = new ArrayList<Nodo_m_ario>
(maxNrOfChildren);
protected String info;
protected static int maxNrOfChildren;
public Nodo_m_ario (String info) {
this.info=info;
}
public Nodo_m_ario() {
}
public void addChild(int position, Nodo_m_ario child) {
child.setParent(this);
child.add(position,child);
}
public Nodo_m_ario getParent() {
return parent;
}
public void setParent(Nodo_m_ario parent) {
this.parent = parent;
}
// N-ary tree
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
public class Albero_m_ario extends Nodo_m_ario {
private Nodo_m_ario root;
private int height;
public Albero_m_ario(int ariety) {
super();
Nodo_m_ario.maxNrFigli = ariety;
}
public Nodo_m_ario setRoot(String info) {
if (root!=null){
return null;
}
root = new Nodo_m_ario(info);
root.parent = null;
return root;
}
public void addNodeV(Nodo_m_ario u, String info, int i) {
Nodo_m_ario child = new Nodo_m_ario(info);
u.addChild(i, child);
}
}
//Main
public class Main {
public static void main(String[] args) {
Albero_m_ario tree = new Albero_m_ario(10);
Nodo_m_ario n1 = new Nodo_m_ario("node 1");
Nodo_m_ario n2 = new Nodo_m_ario("node 2");
Nodo_m_ario n3 = new Nodo_m_ario("node 3");
Nodo_m_ario n4 = new Nodo_m_ario("node 4");
Nodo_m_ario n5 = new Nodo_m_ario("node 5");
Nodo_m_ario r = tree.setRoot("0");
tree.addChild(n1);
tree.addChild(n2);
tree.addChild(n3);
tree.addChild(n4);
tree.addChild(n5);
tree.addNodeV(r, "node 1", 0);
tree.addNodeV(n3, "node 3", 1);
tree.print();
}
}
我希望输出是我创建的树,但实际结果是
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1,
Size: 0
at java.base/java.util.ArrayList.rangeCheckForAdd(ArrayList.java:787)
at java.base/java.util.ArrayList.add(ArrayList.java:512)
at albero_m_ario.Nodo_m_ario.addChild(Nodo_m_ario.java:28)
at albero_m_ario.Albero_m_ario.addNodeV(Albero_m_ario.java:32)
at albero_m_ario.Main.main(Main.java:21)