Please read on NoSuchElementException.
Well your problem is
if (test_zone == zone_arrivee) {
return chemin.next().get(1);
} else {
List<Zone> new_chemin = new ArrayList<>();
new_chemin.addAll(chemin.next()); // THIS LINE
new_chemin.add(test_zone);
chemins.add(new_chemin);
zones_exclues.add(test_zone);
}
encapsulate it by : (Note your element is changing here)
if(chemin.hasNext()) {
if (test_zone == zone_arrivee) {
return chemin.next().get(1);
} else {
List<Zone> new_chemin = new ArrayList<>();
enw_chemin.addAll(chemin.next()); // THIS LINE
new_chemin.add(test_zone);
chemins.add(new_chemin);
zones_exclues.add(test_zone);
}
}
If you want to keep the element same :
for (Iterator<List<Zone>> chemin = chemins.iterator(); chemin.hasNext();) {
List<Zone> zoneList = chemin.next();
for (Zone test_zone : zoneList.get(chemins.size() - 1).getVoisinsAccessible(zones_exclues)) {
new_way = true;
if (test_zone == zone_arrivee) {
return zoneList.get(1);
} else {
List<Zone> new_chemin = new ArrayList<>();
new_chemin.addAll(cheminList); // THIS LINE
new_chemin.add(test_zone);
zoneList.add(new_chemin);
zones_exclues.add(test_zone);
}
}
chemin.remove();
}