#javascript #html #for-loop #while-loop
#javascript #HTML #for-цикл #цикл while
Вопрос:
Я хочу написать программу на JavaScript для печати всех чисел от 1 до 20, кроме 5 и 10. Когда я использую цикл for, подобный этому:
for (x = 1; x <= 20; x ) {
if (x == 5 || x == 10) {
continue;
}
document.write(x ' ');
}
Он работает правильно и печатает 1 2 3 4 6 7 8 9 11 12 13 14 15 16 17 18 19 20
.
Однако, когда я пытаюсь использовать цикл while, подобный этому:
var x = 1;
while (x <= 20) {
if (x == 5 || x == 10) {
continue;
}
document.write(x ' ');
x ;
}
Это делает веб-страницу невосприимчивой, и я получаю приглашение с просьбой закрыть ее. В чем здесь проблема?
Ответ №1:
Проблема заключается в следующем: внутри цикла for continue возвращается к выражению обновления x , но в цикле while он возвращается к состоянию выполнения while(x <= 20)
Ссылка на документы mdn.
В цикле while он возвращается к условию. В цикле for он переходит к выражению update.
Потому что вы не обновляете счетчик внутри своего условия
while (x <= 20) {
if (x == 5 || x == 10) {
continue;
}
x останется 5 и никогда не обновляется, потому что с continue внутри цикла while он возвращается к текущему состоянию. Это приведет к бесконечному циклу.
Чтобы решить эту проблему, вы можете увеличить счетчик перед оператором continue внутри цикла while
while (x <= 20) {
if (x == 5 || x == 10) {
x
continue;
// for (x = 1; x <= 20; x ) {
// if (x == 5 || x == 10) {
// continue;
// }
// document.write(x ' ');
//}
var x = 1;
while (x <= 20) {
if (x == 5 || x == 10) {
x
continue;
}
document.write(x ' ');
x ;
}
Ответ №2:
В первом случае объявление цикла for (x = 1; x <= 20; x )
обрабатывает увеличение x
между итерациями, поэтому каждый раз, когда выполняется тело цикла, вы получаете другое значение x
.
Во втором случае x
выполняется только, если x
не является ни 5
nor 10
. Итак, при x
достижении 5
этого цикл будет выполняться x = 5
вечно, поскольку его ничто не меняет.