打印时出现循环错误"三角形"的星星

时间:2015-02-04 01:11:05

标签: java loops

我正在尝试使用嵌套循环打印下面的图片(我应该用于& 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;
    }  

4 个答案:

答案 0 :(得分:0)

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

一旦l = 3 结果将是否定的,并且第一个while循环不会被执行

答案 1 :(得分:0)

就像你在n中添加两个一样,你必须从m中删除2。如果我理解得很好,m是你的空格数,n是你的星数,所以如果加上两颗星; n+2然后你必须删除这个空格:m - 2因为两个添加的星星占据了那个空间。

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

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

int temp = n; 

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

答案 2 :(得分:0)

错误是您不会在每个循环中重置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();
}

答案 3 :(得分:0)

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

或者,使用双索引数组可能会很有趣。如果你需要使用while循环,可以查看更多的文本。也许可以使用for循环来填充双重索引的char数组,并使用&#34; &#34;或者&#34; *&#34;然后只需打印出数组的内容,同时在打印后将值设置为null并检查数组是否为空。

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