微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在PHP中使用多个For循环制作的星号内置,ASCII艺术金字塔中错位的行

如何解决在PHP中使用多个For循环制作的星号内置,ASCII艺术金字塔中错位的行

这是我的代码,我需要修复此金字塔,在这里您可以看到显示内容代码
问题是

         *        * *//these i want to fix
       *   *
      *     *
     *       *
    *         *
   *           *
  *             *
 *               *
*                 *
$n = 10;
for ($i = 1; $i <= $n; $i++)
{
    for ($j = 0; $j < ($n - $i); $j++)
        echo " ";
    echo "*";
    for ($j = 1; $j <= $i-1; $j++)
        echo " ";
    for ($k = 1; $k < $i-1; $k++)
        echo " ";
    if($i!=1)
        echo "*</br>";
}

Demo of Broken Code

解决方法

在第一个if($i!=1) for循环的末尾有$i作为条件。实际上,这实际上需要移至第一个sub-for循环。

这是为什么?那么,您的$i for循环正在打印两个*。不过,在金字塔的顶部,您只有一个*符号。在这种情况下,我们需要排除在那种情况下的显示,但仅限于那种情况。

Full Working Demo.

$n = 10;
for ($i = 1; $i <= $n; $i++)
        {
            for ($j = 0; $j < ($n - $i); $j++)
                echo " ";
                if($i!=1) {
                    echo "*";
                }
            for ($j = 1; $j <= $i-1; $j++)
                echo " ";
            for ($k = 1; $k < $i-1; $k++)
                echo " ";
                echo "*\n";
        }

完整输出:

         *
        * *
       *   *
      *     *
     *       *
    *         *
   *           *
  *             *
 *               *
*                 *

您有两个流浪*显示。第二个是由于$i == 1$i的第一个for循环中显示之后的情况引起的,第一个是由于不忽略{{1}的第一种情况的*符号引起的}在$i for循环中。

,

play for example


<?php
for ($i = 0; $i < 15; $i++) {

    echo str_repeat(' ',15-$i). "*" . str_repeat(' ',2*$i) . "*\n";
}

echo ' '.str_repeat('*',31)."\n";
,

if ($i != 1)$i为1时跳过新行的输出,这就是为什么第二行仍在第一行输出的原因。如果您更改输出<br>的逻辑,它将起作用。

$n = 10;
for ($i = 1; $i <= $n; $i++)
{
    for ($j = 0; $j < ($n - $i); $j++) {
        echo " ";
    }
    echo "*";
    for ($j = 1; $j <= $i-1; $j++) {
        echo " ";
    }
    for ($k = 1; $k < $i-1; $k++) {
        echo " ";
    }
    
    if ($i != 1) {
        echo "*";
    }
    echo "<br>";
}
         *
        * *
       *   *
      *     *
     *       *
    *         *
   *           *
  *             *
 *               *
*                 *

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。