2015-07-09 6 views
0

Я прислушался к некоторым манипуляциям с массивами, и у меня возникла проблема, создавая бесконечный цикл. Может кто-нибудь объяснить это, пожалуйста, пожалуйста?Почему эти строки java идут в бесконечный цикл

p.s. не беспокойтесь о команде трассировки, я создаю собственное расширение java для экземпляра smartfoxserver 2x.

String deckOf4Array[] = new String[] {"AD","KD","QD","JD","10D","9D","8D","7D","6D","AH","KH","QH","JH","10H","9H","8H","7H","6H","AC","AS","KS"}; 
List<String> deckOf4List = new ArrayList<String>(Arrays.asList(deckOf4Array)); 

for(int n=0; n<4; n++) 
{ 
    int cardindex = new Random().nextInt(deckOf4List.size()-1); 
    trace("cardindex: " + cardindex); 
    for (ListIterator<String> iter = deckOf4List.listIterator(); iter.hasNext();) 
    { 
     // Here goes infinite loop 
     trace("cardindex: " + cardindex); 

     if(cardindex == iter.nextIndex()) 
     { 
      // Here goes manipulations 
     } 
     iter.remove(); 
    } 
} 
+0

где определено intCardIndex? – Alp

ответ

1

Вы должны редактировать свои цикл ...

for (ListIterator<String> iter = deckOf4List.listIterator(); iter.hasNext(); iter.next()) 

Метод NEXTINDEX() возвращает индекс наступающий, тем не менее, он не перемещает курсор в вашей итерации. Поэтому, если вы положите iter.next() в свой цикл for, он фактически переместит курсор. В вашем случае, вы не перемещая курсор, так что вы держите итерацию индекса 0.

Что касается official documentation ...

next() - Возвращает следующий элемент в списке и перемещает позицию курсора.

int nextIndex() - Возвращает индекс элемента, который будет возвращен последующим вызовом next().

+0

Спасибо, приятель! Забыл о перемещении индекса. Задача решена – kido25

0

Я думаю, потому что вам нужно вызвать deckOf4List.next(), который фактически перемещает итератор к следующему индексу. .nextIndex() просто показывает следующий индекс.

+0

Спасибо! Будем иметь в виду. – kido25