Почему эти вложенные циклы не работают? - PullRequest
2 голосов
/ 06 июня 2010

Я пытался и пытался заставить этот код работать и продолжал придумывать zilch. Поэтому я решил попробовать его, используя вместо этого «for loop», и это сработало с первой попытки. Может кто-нибудь сказать мне, почему этот код не годится?

<?php
$x = $y = 10;

while ($x < 100) {
    while ($y < 100) {
        $num = $x * $y;
        $numstr = strval($num);
        if ($numstr == strrev($numstr)) {
            $pals[] = $numstr;
        }
        $y++;
    }
    $x++;   
}
?>

Ответы [ 3 ]

10 голосов
/ 06 июня 2010

вы должны сбросить y = 10 в первый раз.

$x = 10;

while ($x < 100) {
    $y = 10;
    while ($y < 100) {
        $num = $x * $y;
        $numstr = strval($num);
        if ($numstr == strrev($numstr)) {
            $pals[] = $numstr;
        }
        $y++;
    }
    $x++;   
}
2 голосов
/ 06 июня 2010

Вам нужно сбросить y перед началом цикла y.

While($x < 100){
 $y=10; //... rest of code
0 голосов
/ 14 июня 2010

Для циклов, которые зацикливаются на целое число, которое увеличивается, я бы предпочел цикл for:

for ($x=0; $x < 100; $x++) {
  for ($y=10; $y<100; $y++) {
    $num = $x * $y;
    $numstr = strval($num);
    if ($numstr == strrev($numstr)) {
      $pals[] = $numstr;
    }
  }  
}

ИМХО, это гораздо более читабельно и тоже короче.

...