我已经修改了这个问题。我有两个链接列表,每个对象类型一个(Vertex,Edge)。边的链表打印,但顶点的链表不会打印。如果我切换订单或将代码分成两种方法,这个问题仍然存在。
这是打印方法
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();
}
答案 0 :(得分:1)
使用调试器(如在Eclipse中)或设置一些System.out行来验证,但似乎arraylist是空的并且没有进入while循环。
答案 1 :(得分:0)
第一点是你希望得到的答案,但如果不是这样的话,其他部分也很有意思(抱歉不在评论中提问)。
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
时看到问题。之后,您只需检查堆栈即可查看问题。