2013-11-21 71 views
1

我正在爲使用迭代器(BFS)檢查連接性的圖形構建程序,但由於某種原因,檢查連接性的方法每次都以奇怪的方式運行我嘗試打印它。迭代器循環的奇怪打印行爲

這是怎樣的代碼看起來在此刻:

public boolean isConnected() { 

     for(int i=0;i<numVertices;i++) { 
      Iterator<T> connection = iteratorBFS(i); 
      int count = 0; 
      while(connection.hasNext()) { 
       count++; 
       System.out.println(connection.next()); 
      } 
      if(count!=numVertices) { 
       System.out.println("The graph is disjoint."); 
       return false; 
      } 
     } 
     System.out.println("The graph is connected."); 
     return true; 

    } 

和輸出當屬:

A 
B 
C 
D 
B 
A 
C 
D 
C 
B 
D 
A 
D 
B 
C 
A 
The graph is connected. 

它的打印頂點的唯一原因是,看看迭代器是否正常工作,它顯然是。但是,只要我註釋掉System.out.println(connection.next),什麼都不打印。沒有錯誤信息,什麼都沒有。我甚至嘗試直接在驅動程序中打印出graph.isConnected,但它沒有顯示任何內容。在此之前,我試圖根據布爾結果的值在主要方法中打印出消息,但那也不起作用。

我真正想要打印的唯一東西是最後一行,它說明圖形是否連接。不幸的是,考慮到該方法現在的行爲,如果我在while while循環中註釋掉測試行,它將不會打印任何內容。

我在這裏做錯了什麼?爲什麼該方法的行爲如此?

+0

您必須調用.next才能使用迭代器。刪除system.out並保留connection.next() –

回答

2

如果你註釋掉:

System.out.println(connection.next()); 

你仍然需要做到這一點:

connection.next(); 

否則連接從來沒有得到推進。

+0

是的,這解決了問題!非常感謝你! – Vincents