2010-06-06 6 views
2

J'ai essayé et essayé et essayé d'obtenir ce code pour travailler et a continué à venir avec zilch. J'ai donc décidé de l'essayer en utilisant "for loops" à la place et ça a marché d'abord. Quelqu'un pourrait-il me dire pourquoi ce code n'est pas bon?Pourquoi ces boucles while imbriquées ne fonctionnent-elles pas?

<?php 
$x = $y = 10; 

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

Répondre

10

vous devriez réinitialiser y = 10 dans le premier temps.

$x = 10; 

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

C'est aussi simple que ça? J'ai mis la variable y au mauvais endroit? – aliov

+1

bien, vous ne le définissez qu'une seule fois ... de toute façon, si vous cherchez des palindromes de x * y, vous pouvez éviter de vérifier _both_x * y et y * x, donc je mettrais $ y = $ x au lieu de $ y = 10. –

2

Vous devez réinitialiser y avant le début de la boucle y.

While($x < 100){ 
$y=10; //... rest of code 
0

Pour boucles qui boucle sur un entier qui est incrémentée je préférerais la boucle 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; 
    } 
    } 
} 

à mon humble avis ce qui est beaucoup plus facile à lire et il est plus court, aussi.

Questions connexes