2017-09-22 2 views
-1

Impossible de comprendre où cela ne fonctionne pas. Au centre j'ai besoin d'une ligne avec seulement ++++++. Mais je n'arrive pas à le trouver au travail. Je l'ai pour travailler avec une boucle while et une boucle for mais pas la boucle while.Méthode PHP do-loop

Ca doit ressembler à ceci

  -------+ 
      ------++ 
      -----+++ 
      ----++++ 
      ---+++++ 
      --++++++ 
      -+++++++ 
      ++++++++ 
      -+++++++ 

etc. Mais la ligne médiane est pas une ligne complète de + caractères.

 <?php 
     echo"<p>Do While loop</p>"; 
     $x1=8; 
     $x2=1; 
     do { 
      $x3=1; 
      do { 
       echo"--"; 
       $x3++; 
      }while($x3<$x1); 
      $x4=1; 
      do { 
       echo"+"; 
       $x4++; 
      }while($x4<=$x2); 
      echo"<br>"; 
      $x1--; 
      $x2++; 
     }while($x1>=0 and $x2<=8); 

     $y1=1; 
     $y2=7; 
     do { 
      $y3=1; 
      do { 
      echo"--"; 
      $y3++; 
      }while($y3<=$y1); 
     $y4=1; 
     do { 
      echo"+"; 
      $y4++; 
     }while($y4<=$y2); 
     echo"<br>"; 
     $y1++; 
     $y2--; 
     }while($y1<=7 and $y2>=1); 

    ?> 
+0

vous êtes dans le profond do do [rires]. en toute gravité, vous dites que vous avez une réponse à votre problème (en réalité 2), mais vous essayez d'utiliser une construction qui est rarement utilisée (selon mon expérience) - je m'en tiens à ce que 1) fonctionne; 2) est plus facile à comprendre pour un autre développeur; 3) exécute le plus rapide ... –

+0

Personne ne va déboguer cela pour vous. https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – jdv

Répondre

0

Cela n'arrivera jamais.

do { /*Line 4*/ 
    echo"--"; 
    $x3++; 
}while($x3<$x1); 

L'écho sera évalué avant la question de rupture.

C'est la différence fondamentale entre do while, et while loop. Dans la boucle while, la condition est évaluée avant toute chose. Dans la boucle do while, tout le reste est évalué avant la première vérification de la condition.

0

bien je l'ai compris à la fin. En mettant un if ($ x1 < = 1) {break;} après la première boucle do interne, je vais forcer la boucle à sauter et continuer à partir de là.