迭代器循环的奇怪打印行为

时间:2013-11-21 16:32:30

标签: java loops iterator println

我正在构建一个程序,用于使用迭代器(BFS)来检查连接性的图形,但出于某种原因,每当我尝试打印时,检查连接的方法都会以奇怪的方式运行。 / p>

这就是代码目前的样子:

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,它没有向我显示任何内容。在此之前,我尝试在main方法中打印出消息,具体取决于布尔结果的值,但这也不起作用。

我唯一想要打印出来的是最后一行,它说明图表是否已连接。不幸的是,鉴于该方法现在的行为方式,如果我在循环中间注释出测试行,它将不会打印任何内容。

我在这里做错了吗?为什么方法表现得像这样?

1 个答案:

答案 0 :(得分:2)

如果你发表评论:

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

你仍然需要这样做:

   connection.next();

否则连接永远不会升级。