我已经修改了这个问题。我有两个链接列表,每个对象类型(顶点,边缘(一个。 边的链接列表打印,但顶点的链接列表不打印。如果我切换顺序或将代码分成两种方法,此问题仍然存在。
这是打印方法
public void printList() {
ListIterator edgeIter = m_EdgeList.listIterator();
Edge e;
while (edgeIter.hasNext()) {
e = (Edge)edgeIter.next();
System.out.println(e.getName()+e.getOrientation());
}
ListIterator vertexIter = m_VertexList.listIterator();
Vertex v;
while (vertexIter.hasNext()) {
v = (Vertex)vertexIter.next();
System.out.println(v.getName()+":"+v.getIncidentEdge(1).getName()+ v.getIncidentEdge(1).getOrientation()+v.getIncidentEdge(2).getName()+ v.getIncidentEdge(2).getOrientation());
}
}
链接列表不为空。 当我创建它时,我打印了大小并看到它增加了。 另外,当我只是打印原始列表,然后是我得到的大小的序言打印时:
[com.expertdecision.topology.classification.structure.Vertex@de6ced、com.expertdecision.topology.classification.structure.Vertex@c17164、com.expertdecision.topology.classification.structure.Vertex@1fb8ee3]表面:f1:由 3 个顶点组成
顶点迭代器似乎没有按预期工作,但我使用它的方式与使用边缘迭代器的方式相同。
以下是从边缘数组为边缘创建链接列表的方法:
public void setEdgeList(Edge[] edges) {
String method = "setEdges(Edge[])";
if (m_Tracing) Tracing.print(m_Class + "::" + method);
m_EdgeList = new LinkedList<Edge>();
ListIterator iter = m_EdgeList.listIterator();
for (int i=0; i<m_EdgeCount; i++) {
iter.add(edges[i]);
}
}
以下是为顶点创建链接列表的方法:
/**
* Create vertices for every pair of edges
*/
public void createVertices() {
String method = "createVertices()";
if (m_Tracing) Tracing.print(m_Class + "::" + method);
int iVertex;
String[] vlabel = {"A","B","C","D","E","F","G"};
//This implementation uses a LinkedList
m_VertexList = new LinkedList<Surface>();
ListIterator eIter = m_EdgeList.listIterator();
Vertex v;
Edge e1;
Edge e2;
//
iVertex = 0;
e1 = (Edge)eIter.next();
while (eIter.hasNext()) {
e2 = (Edge)eIter.next();
v = new Vertex(vlabel[iVertex],e1, e2);
if (m_Debugging) System.out.println("Adding " + v.getName()+ " to vertex list");
m_VertexList.add(v);
if (m_Debugging) System.out.println("Current size of vertex list is " +m_VertexList.size());
iVertex++;
e1 = e2;
}
//Vertex for the last-first edge
e2 = (Edge)m_EdgeList.get(0);
v = new Vertex(vlabel[iVertex],e1, e2);
if (m_Debugging) System.out.println("Adding " + v.getName()+ " to vertex list");
m_VertexList.add(v);
if (m_Debugging) System.out.println("Current size of vertex list is " +m_VertexList.size());
if (m_Debugging) printList();
}
要么使用调试器(如在 Eclipse 中(要么设置一些 System.out 行进行验证,但似乎 arraylist 是空的并且没有进入 while-loop。
点是你正在寻找的答案,但如果不是这种情况,其他部分也很有趣(抱歉没有在评论中询问(。
- 你得到了常数
2
的第二点,但可能你只有0
和1
。数组是从 Java 中的0
索引的。 - 你发现异常了吗?(你关于更改顺序的评论不会影响结果,只是想确定一下。[在不至少打印出堆栈跟踪的情况下捕获异常是非常糟糕的习惯。
- 如果第一个问题的答案是肯定的...边缘
null
的任何可能性,或 - (为什么使用原始类型?
- (为什么需要列表迭代器?
- 你能分享一下
Vertex#getIncidentEdge(1)
的实施吗?
所以我会使用这样的东西:
System.out.println(v.getName()+":"+v.getIncidentEdge(0).getName()+ v.getIncidentEdge(0).getOrientation()+v.getIncidentEdge(1).getName()+ v.getIncidentEdge(1).getOrientation());
@Ascalonian的回答是一个有用的建议。这样,当您将断点设置为 Exception
.之后,您只需检查堆栈即可查看问题。