2013-12-12 6 views
1

В общем не цикл, а просто Перефразировать для для цикла:Хотя петли и петли

for(starting point; condition; excution code){} 
//and while 
starting point; 
while(condition) 
{excution code; 
} 

Мне очень жаль, если это кажется немой вопрос. Но мне просто интересно, есть ли случай, когда лучше использовать, чем для. Или наоборот.

ответ

1

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

Также важным аспектом является то, что в цикле для цикла область действия итератора устанавливается только внутри цикла.

Но мне просто интересно, есть ли случай, когда его лучше использовать, чем для.

Я предпочел бы или выбрать for над while, поскольку это более читаемым (хотя некоторые могут возразить, что последний является более читаемым.) А также из-за причины итератора области видимости.

Кроме того, насколько Сходство обеспокоен в то время как цикл аналогичен:

while (condition) 
{ 
    statements; 
} 

похож на

if (condition) 
{ 
    do 
    { 
     statements; 
    } while (condition); 
} 

Также вы можете использовать в то время, когда вы не хотите использовать счетчик и ваши единственным мотивом является завершение условия.

+0

Хотя хорошей практикой, я не могу видеть, как итератор сфера вынужден внутри цикла: например, как насчет 'int i = 0; for (; i <10; i ++) {} ' – fvu

+0

@fvu: - Да, это правильно, я знаю, что это можно сделать, но я не думаю, что это очень хорошая практика. Также я имел в виду, что нам удается держать i в рамках цикла, вместо того чтобы позволить ему уйти в остальную часть кода. –

+0

Ах, хорошо, что вы имеете в виду, что (хороший) программист может применять эту область действия, а не то, что язык или компилятор будет ее применять. Спасибо за это разъяснение. – fvu

2

Все для циклов можно переписать так же, как и петли, и наоборот. Разница заключается в намерении программиста: повторяете ли вы что-то , а условие истинно? .. или вы что-то итерации от чего-то?

+0

Я не уверен, что каждый цикл может быть преобразован в цикл while в * каждом языке *. FORTRAN стиль DO I = 1,100 стилей стиля приходят на ум. OTOH, FORTRAN раньше даже не имел циклов, а? – Ingo

+1

'while' просто прославленный' if' + 'goto' * wink *. Вы технически правильно подумали, что у F77 не было 'while' .. ;-) – thebjorn

0

Цель состоит в том, чтобы использовать цикл for для фиксированного числа итераций и цикл while для неопределенного числа итераций.

На самом деле каждый цикл цикла можно записать в виде цикла while с предшествующей инициализацией, как вы это заметили. (Но обратное также верно и на большинстве языков.)

Лично я склонен использовать циклы while, если я не повторяю массив или строку, где размер, если известен.

Заметим также, что в Java, есть форма для цикла, который выглядит следующим образом:

for (E elem : collection) { ... } 

, который проходит через итератор коллекции элементов типа Е. Это очень хорошая вещь, и очень интуитивно понятный, и он не позволяет вам совершить одну или повторную инициализацию.

1

Вы правы. Каждый цикл цикла можно переписать в виде цикла while и наоборот. Однако, с точки зрения удобочитаемости кода, каждый цикл имеет свои плюсы и минусы.

Как правило, если вам нужна переменная в цикле, которая увеличивается до достижения условия, вы должны использовать цикл for.

Печать массива

for(int i = 0; i < array.length; i++) { 
    print("Element " + i + ": " + array[i]); 
} 

Если вы просто ждете состояния, вы бы предпочли время цикла:

Чтение из потока

while((String line = buffer.readLine()) != null) { 
    print("Next line: " + line); 
} 

Несмотря на то что в семантическом смысле я не хотел бы видеть эти циклы:

Печать массива

int i = 0; 
while(i < array.length) { 
    print("Element " + i + ": " + array[i]); 
    i++; 
} 

Чтение из потока

for(String line = buffer.readLine(); line != null; line = buffer.readLine()) { 
    print("Next line: " + line); 
} 
Смежные вопросы