打印 "triangle" 个星星时出现循环错误

Loop error when printing "triangle" of stars

我正在尝试使用嵌套循环打印下图(我应该使用 for & while 循环):

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

以 5 个空格开头,每行减少 2 个。 以 2 星开始,每行增加 2 星。 在 4 行结束。

我的代码在第一行有效,但它不会在其余 3 行打印星星。有人可以看到错误可能是什么吗?请不要给出答案,我只是需要帮助理解逻辑错误!

    int m = 6;
    int n = 0;

    for(int l = 1; l < 5; l++){

        while(m > 0){
            System.out.print(" ");
             m--;
        }
        while(n < (2*l)){
            System.out.print("*");
            n++;
        }
        System.out.println();
        m = 5 - (2*l);
        n = n + 2;
    }  

提示: 看看 m=5 - (2×l);

一旦 l=3 结果将为负,第一个 while 循环将不会被执行

就像你给n加2一样,你必须从m中减去2。如果我理解得很好,m 是你的 space 数,n 是你的星星数,所以如果你加两颗星; n+2 那么你也必须删除 space :m - 2 因为添加的两颗星星占据了 space.

m = m - 2;
n = n + 2;

编辑:您还必须更改编辑 n 的 while 循环,以免更改 n:

int temp = n; 

while(temp > (2*l)){
    System.out.print("*");
            temp++;
}

错误是您没有在每个循环中重置 n 变量。在第一个循环之后,您将 2 添加到它已经大于 2 * l,因此不会打印更多的星星。

将其结构化为:

for (int l = 0; l < 4; l ++) {
    for (int i = 0; i < 5 - 2l; i++) 
        System.out.print(" ");
    for (int i = 0; i < 2 + 2l; i++)
        System.out.print("*");
    System.out.println();
}

使用嵌套 for 循环,外循环沿行向下移动,内循环沿列移动。每次通过内部循环都应该检查 ro 是否放置了空 space 或星号。这可以通过 if 语句来完成,在 for 循环中使用整数变量来确定何时放置 space 或星号。此算法将根据您想要的形状而有所不同。

或者,使用双索引数组在这里可能会很有趣。更复杂,但如果您需要使用 while 循环,可能需要注意一下。可以使用 for 循环用“”或“*”填充双索引 char 数组,然后简单地打印出数组的 ghe 内容,同时在打印后将值设置为 null 并检查数组是否是否为空。

也许其中一些有用。编码愉快。