我有以下课程:
public class Model {
protected String name;
protected ArrayList<Model> children;
public Model(){
children = new ArrayList<Model>();
}
public void addChild(Model node) {
children.add(node);
}
//other code here
}
public class cPackage extends Model{
public cPackage() {
super();
}
//other code here
}
public class cClass extends Model{
public cClass() {
super();
}
//other code here
}
public class cMethod extends Model{
public cMethod() {
super();
}
//other code here
}
public void tryme(Object[] objs){
String values = (String)objs[0];
Model root = null;
astNode = ax.getDeclaringNodeInProject(handles, bindings);
if(astNode instanceof TypeDeclaration){
TypeDeclaration cl = (TypeDeclaration)astNode;
root = new cClass();
root.setName(cl.getName().getFullyQualifiedName());
}else if(astNode instanceof MethodDeclaration){
MethodDeclaration me = (MethodDeclaration)astNode;
root = new cMethod();
List mod = me.parameters();
String vars ="";
...
root.setName(me.getName().getFullyQualifiedName() + "(" + vars + ")");
}
Model currentNode = null;
Model prevNode = root;
for(int i = 1 ; i < objs.length; i++){
if(astNode instanceof PackageDeclaration){
PackageDeclaration pka = (PackageDeclaration)astNode;
p8.setName(pka.getFullyQualifiedName());
if(currentNode == null) {
currentNode = p8;
prevNode.addChild(currentNode);
}
prevNode = currentNode;
}else if(astNode instanceof MethodDeclaration){
MethodDeclaration me = (MethodDeclaration)astNode;
...
m8.setName(me.getName().getFullyQualifiedName() + "(" + vars + ")");
if(currentNode == null) {
currentNode = m8;
prevNode.addChild(currentNode);
}
prevNode = currentNode;
}else if(astNode instanceof TypeDeclaration){
TypeDeclaration cl = (TypeDeclaration)astNode;
c8.setName(cl.getName().getFullyQualifiedName());
if(currentNode == null) {
currentNode = c8;
prevNode.addChild(currentNode);
}
prevNode = currentNode;
}
}
}
很抱歉,如果缺少“{”或“}”。我在这里尝试做的是我从服务器获得这样的数据:
[School Chair Table Chalk]
...
[Apple Peer Mango Melon]
全部在数组中。我想建立类似树状结构的东西,从左边读取:
每个元素都是其后面元素的de parent。我正在遍历数据来完成它。例如,我希望得到类似的东西:
+School
Chair
Table
Chalk
+Apple
Peer
Mango
Melon
但是当我运行上面的代码时,我只得到前两个元素,如:
+School
Chair
+Apple
Peer
并且不会显示以下元素。
有人可以帮助我在哪里做错了。
感谢。
答案 0 :(得分:1)
看起来addChild()
仅在currentNode
为空时被调用,currentNode
仅在第一次循环时为空。因此,只有一个孩子被添加。
答案 1 :(得分:0)
在第一次处理各种数据结构时,我完全记得学习曲线。 (指针炖任何人?)
我发现一种非常有用的技术是绘制正在发生的事情的图表。
{ name = "granddad", children = --- }
|
[ { name = "son1" , children = --- } { name = "dottir1", children = --- } ... }
| |
[ { ... } ... ] [ { ... }, { ...} ... ]
然后,当您用手指检查代码中的实际轨迹时,您将在图中。
答案 2 :(得分:-1)
在循环中,您目前正在执行此操作:
您最终得到的是链接列表。根将只在子列表中有一个子项。那个孩子的孩子名单中会有一个孩子,依此类推。要打印它,您必须遍历链表中的每个节点。