如何解决在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>";
}
解决方法
在第一个if($i!=1)
for循环的末尾有$i
作为条件。实际上,这实际上需要移至第一个sub-for循环。
这是为什么?那么,您的$i
for循环正在打印两个*
。不过,在金字塔的顶部,您只有一个*
符号。在这种情况下,我们需要排除在那种情况下的显示,但仅限于那种情况。
$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循环中。
<?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 举报,一经查实,本站将立刻删除。