2013-03-18 3 views
4

У меня есть обсуждение (прочитайте аргумент!) С одним из моих коллег. Я утверждаю, что этот код очень неправильно, но он думает, что нет ничего плохого:Правильно ли этот код Java?

for (Iterator<String> iter = collectionOfStrings.iterator(); iter.hasNext();) { 
    String item = iter.next(); 
    ... 
} 

Я утверждаю, что этот код является неправильным, потому что есть дублирование зацикливания. Используйте Iterator или используйте цикл For, но нет необходимости использовать их одновременно.

Я бы переписать код следующим образом:

Iterator<String> iter = collectionOfStrings.iterator(); 
while (iter.hasNext()) { 
    String item = iter.next(); 
    ... 
} 

Что вы думаете?

+3

А «для» петли просто синтаксическая сокращение для «а» петли в любом случае. Я не вижу смысла спорить .... –

+3

'while' - это тоже цикл! – adarshr

+0

Просто проверьте это, но кажется правильным. –

ответ

11

Ни один из кодов не является «неправильным», в том смысле, что оба делают то, что ожидается. Второй код, хотя и эквивалентен, загрязняет локальные переменные, потому что iter остается определенным после окончания цикла.

1

Ваш коллега прав. Первый код с циклом for должен работать нормально.

Фактически, while также представляет собой цикл, поэтому и ваш код, и его содержащий один цикл и итератор.

5

Оба эти примера синтаксически правильны. Одно из преимуществ размещения объявления в цикле for заключается в том, что переменная освобождается после завершения кода кода, тогда как итератор сохраняется после завершения цикла while

2

На самом деле это то же самое. Для всего лишь вариация времени, или пока это всего лишь вариация для, как бы вы ни хотели ее поместить. Вы можете написать для

for (init;cond;incr){ 
... 
} 

как этот

init 
while(cond){ 
.... 
incr 
} 
5

Второй хорош.

Первый немного лучше. Он ограничивает область переменной цикла.

Но поскольку Java 1.5, цикл Еогеасп иногда может быть более элегантным, чем либо:

for (String item : collectionOfStrings) { 
    ... 
} 
Смежные вопросы