Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DFS中的迭代器导致java.lang.StackOverflower错误_Java_Recursion_Iterator_Stack Overflow - Fatal编程技术网

DFS中的迭代器导致java.lang.StackOverflower错误

DFS中的迭代器导致java.lang.StackOverflower错误,java,recursion,iterator,stack-overflow,Java,Recursion,Iterator,Stack Overflow,我目前正试图通过自己创建graph类来制作游戏的图形表示。 构造函数就是这个(希望这里没有任何逻辑错误): 我读过StackOverflowerr,它与可用内存不足有关,我理解这一点,我的问题不是这样。但我不明白为什么它会发生在这里,因为迭代器。我甚至尝试过使用彼此接近的节点,这些节点只进行几个递归调用,同样的错误也会发生 在进入递归调用之前,请检查您是否已经使用 .... int n = iterator.next(); if(!visited[n]){ ... } 您从未检查是否已访问该节

我目前正试图通过自己创建graph类来制作游戏的图形表示。 构造函数就是这个(希望这里没有任何逻辑错误):


我读过StackOverflowerr,它与可用内存不足有关,我理解这一点,我的问题不是这样。但我不明白为什么它会发生在这里,因为迭代器。我甚至尝试过使用彼此接近的节点,这些节点只进行几个递归调用,同样的错误也会发生

在进入递归调用之前,请检查您是否已经使用

....
int n = iterator.next();
if(!visited[n]){
...
}

您从未检查是否已访问该节点。只将其标记为viisited,但当再次遇到它时,再次检查它=>无限递归。在方法
hasPath()
的开头添加
println()
语句,打印两个参数。输出将有助于确定代码失败的原因。这叫做调试。您可能还想阅读“”,不过简单的
打印
语句可能更容易看出问题。@Polygenme是的,您是对的,谢谢
 public boolean hasPath(int source , int dest)
        {
            if(source >= nNodes)
                return false;
            else
            {
                visited[source] = true;

                try
                {
                    Iterator<Integer> iterator = adj[source].listIterator();
                    while(iterator.hasNext())
                    {
                        int n = iterator.next();
                        if(n == dest)
                            return true;
                        visited[n] = true;
                        if(hasPath(n, dest))
                            return true;
                    }//end while
                    return false;
                }//end try
                catch(NullPointerException exception)
                {
                    exception.printStackTrace();
                }//end catch

                return false;
            }//end else
        }//end method has path
Exception in thread "main" java.lang.StackOverflowError
    at java.util.LinkedList$ListItr.<init>(Unknown Source)
    at java.util.LinkedList.listIterator(Unknown Source)
    at java.util.AbstractList.listIterator(Unknown Source)
    at java.util.AbstractSequentialList.iterator(Unknown Source)
    at logic.GameGraph.hasPath(GameGraph.java:67)
    at logic.GameGraph.hasPath(GameGraph.java:74)at logic.GameGraph.hasPath(GameGraph.java:74)
    at logic.GameGraph.hasPath(GameGraph.java:74)
    at logic.GameGraph.hasPath(GameGraph.java:74)
   Iterator<Integer> iterator = adj[source].listIterator();
if(hasPath(n, dest))
....
int n = iterator.next();
if(!visited[n]){
...
}