DFS error at java.util.ArrayList$Itr.checkForComodification(Unknown Source)

0

Cześć, proszę o pomoc z poniższym kodem.
Chciałbym przeszukać drzewo rozpinajace algorytmem DFS.
W załączniku drzewo.

Kod funkcji DFS:

static void DFS(Integer newCurrentNode, ArrayList<Integer>toVisit)
    {
    	toVisit.removeIf( p-> p == newCurrentNode);
    	System.out.println("currentNode: "  + newCurrentNode + " toVisitSize: " + toVisit.size());
    	if(toVisit.size() == 0)
    		return;
    	else
    	{
   		for (Integer integer : toVisit)
    		{
    			DFS(integer, toVisit);
			}
    	}
    	
    }

MAIN:

    ArrayList<Integer> list = new ArrayList<>(4);
         list.add(0); list.add(1); list.add(2); list.add(3); 
         StateSpace.DFS(0, list);

Kod bledu:

currentNode: 0 toVisitSize: 3
currentNode: 1 toVisitSize: 2
currentNode: 2 toVisitSize: 1
currentNode: 3 toVisitSize: 0
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at com.company.StateSpace.DFS(StateSpace.java:23)
at com.company.StateSpace.DFS(StateSpace.java:25)
at com.company.StateSpace.DFS(StateSpace.java:25)
at com.company.Main.main(Main.java:19)

Dodam że w C++ praogma tez sie wywala. Aplikacja przestaje dzialac.

1

Modyfikujesz listę w trakcie iteracji (iterujesz w lini 9, a następnie usuwasz coś z tej samej listy w rekurencyjnym wywołaniu DFS). Jednym z rozwiązań będzie przekazanie kopii listy przy rekurencyjnym wywoływaniu metody DFS i użycie metody equals() zamiast operatora == w predykacie

0

Dzieki. Podziałało :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1