2014-11-17 3 views
0

Я так новичок в Arraylists & итераторы & это первый раз, когда я получил это исключение. У меня есть ArrayList у & Я хотел бы сделать следующий алгоритм:java.util.ConcurrentModificationException & iteration?

for (Character c:u){ 

    if(k==1){   //base case 

     if(isAnswer(s+u.get(0))) 

      System.out.println(s+u.get(0)+" is the correct sequence."+ '\n'); 
     return; 
    } 

    else{ 
     u.remove(c); 
     puzzleSolve(k-1, s+c , u); 
     u.add(c); 
     removeLastChar(s); 
    } 

    } //end of for each 

, как я искал это исключение немного я узнал, что я не могу удалить iterms weth для каждого на ArrayList & мне нужно использовать итератор , но i kinna запутался там, где &, как точно я должен положить это время (iter.hasNext()) & такой материал для этой части кода. Я был бы Вам признателен лучше, если вы могли бы помочь мне

PS. s является String (изначально пустой) & к является ИНТ

+1

Возможный дубликат http://stackoverflow.com/questions/1196586/calling-remove-in-foreach-loop-in-java – slnowak

ответ

1

как именно я должен поставить время (iter.hasNext())

Вы можете использовать iterator, как показано ниже:

Iterator<Character> iter = u.iterator(); 
while(iter.hasNext()) 
{ 
    Character c = iter.next(); 
    ..... 
} 

Инициализировать список дженериков: List<Character> u = new ArrayList<Character>();

Подсказка: используйте iter.remove(), iter.add(), где применимо, а не u.remove() и u.add().

Вам нужно начать здесь: http://www.tutorialspoint.com/java/java_using_iterator.htm

+0

& then my all if else in between ?! – LadyM

+0

Да. Ваш код между ним. Он действует как «замена» для «расширенного цикла» в вашем коде. – BatScream

1

Попробуйте это:

Iterator<Character> iter = u.iterator(); 
while (iter.hasNext()) 
{ 
    Character currentChar = iter.next(); 

    if(k==1){   //base case 

     if(isAnswer(s+u.get(0))) 

     System.out.println(s+u.get(0)+" is the correct sequence."+ '\n'); 
     return; 
    } 

    else{ 
     iter.remove(); 
     puzzleSolve(k-1, s+currentChar , u); 
     u.add(currentChar); 
     removeLastChar(s); 
    } 

}

+0

спасибо, я сделал еще это, но все же выдает то же исключение в строках: – LadyM

+0

Character currentChar = iter.next(); – LadyM

+0

и еще одна строка, которую я назвал методом sovePuzzle – LadyM

0

При использовании Еогеасп цикл, вы используете итератор неявно.

ConcurrentModificationException происходит, когда коллекция модифицируется «одновременно» с прохождением итератора по коллекции любыми средствами, за исключением итератора.

Таким образом, использование итератор

Iterator<Character> iter = u.iterator(); 
while (iter.hasNext()) 

в тех случаях, которые необходимо изменить коллекцию в цикле.

Смежные вопросы