Почему разный результат между временем и циклом - PullRequest
2 голосов
/ 11 апреля 2011

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

/ * для кода цикла * /

$counter = 0;
$start = 1;
$end = 11;

for($start;$start<$end;start++) {
$counter=$counter+1;
print $counter;
}

Результат, который я получаю, составляет 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

/ * в то время как код цикла * /

$start=0;
$end=11;

while($start<end) {
$start=$start+1;
print $start;
}

Результат, который я получаю 1,2,3,4,5,6,7,8, 9,10,11

Почему цикл while возвращает результат от 1 до 11, а цикл for возвращает результат от 1 до 10

Ответы [ 4 ]

2 голосов
/ 11 апреля 2011

Приращение в цикле for выполняется после первого цикла.

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

$start=1;
$end=11;

while($start<end) {
    print $start;
    $start=$start+1;
}
0 голосов
/ 11 апреля 2011

На последней итерации цикла while 10 <11, затем вы добавляете от 1 до 10, поэтому оно равняется 11. Но вы уже в цикле.Так что это распечатывает.В следующий раз, 11 <11 будет ложным, поэтому он немедленно завершится. </p>

Теперь, если вы хотите, чтобы это работало, переместите $ start = $ start + 1;ПОСЛЕ печати заявления.

Кроме того, я думаю, что вы путаете себя.В одном примере вы печатаете «$ start», а в другом - «$ counter».

0 голосов
/ 11 апреля 2011

два счетчика не инициализированы с одинаковым значением, попробуйте первый с

$start = 1;
0 голосов
/ 11 апреля 2011

В for случае $start начинается с 1, но в while случае $start начинается с 0.

Работает на for -

 iteration    $start      $start<$end     counter   print   start++        
    1           1            1<11           1         1        2
    2           2            2<11           2         2        3
    3           3            3<11           3         3        4
    4           4            4<11           4         4        5
    5           5            5<11           5         5        6
    6           6            6<11           6         6        7
    7           7            7<11           7         7        8
    8           8            8<11           8         8        9
    9           9            9<11           9         9        10
   10           10          10<11          10         10       11
   11           11          11<11 
                          // (false) break

Аналогичнов цикле while.Это упражнение карандаш-бумага.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...