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

DFS error at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

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

Kod funkcji DFS:

Kopiuj
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:

Kopiuj
    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.

NE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
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

W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

Dzieki. Podziałało :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.