一个链表打印,但另一个非空链表不打印:修订和扩展



我已经修改了这个问题。我有两个链接列表,每个对象类型(顶点,边缘(一个。 边的链接列表打印,但顶点的链接列表不打印。如果我切换顺序或将代码分成两种方法,此问题仍然存在。

这是打印方法

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。

我希望第一

点是你正在寻找的答案,但如果不是这种情况,其他部分也很有趣(抱歉没有在评论中询问(。

  1. 你得到了常数2的第二点,但可能你只有01。数组是从 Java 中的0索引的。
  2. 你发现异常了吗?(你关于更改顺序的评论不会影响结果,只是想确定一下。[在不至少打印出堆栈跟踪的情况下捕获异常是非常糟糕的习惯。
  3. 如果第一个问题的答案是肯定的...边缘null的任何可能性,或
  4. (为什么使用原始类型?
  5. (为什么需要列表迭代器?
  6. 你能分享一下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 .之后,您只需检查堆栈即可查看问题。

相关内容

  • 没有找到相关文章

最新更新