Java中的金字塔模式,后跟星号

时间:2019-03-27 09:48:53

标签: java for-loop if-statement nested-loops

我要在图案下方打印

*
*_*
*_*_*
*_*_*_*
*_*_*_*_*

但是这里的问题是我无法消除最后一个_符号,这是我得到的输出

*
*_*_
*_*_*_
*_*_*_*_
*_*_*_*_*_

int row =5;
String star="*";
String undrscr="_";
String s;
for(int i=1;i<=row;i++)
{//System.out.print(undrscr);
    for(int j=1;j<=i;j++)
    {           
        if(i==1)
        {
        System.out.print(star);
        }
        if(i>1)
        {
            System.out.print(star+""+undrscr);
        if(j==i)
        {
            System.out.print("");
        }
        }
    }

    System.out.println();
}

5 个答案:

答案 0 :(得分:0)

只有在if(i>1){...}这样的情况下,您才能将块undrscr更改为打印j!=i

                if(i>1)
            {
                // print only star
                System.out.print(star);
                // print undrscr if j!=i
                if(j!=i)
                {
                    System.out.print(undrscr);
                }
            }

您将获得模式:

*
*_*
*_*_*
*_*_*_*
*_*_*_*_*

答案 1 :(得分:0)

将内部for循环更改为:

for (int i = 1; i <= row; i++) {
    for (int j = 1; j <= i; j++) {
        if (i == 1) {
            System.out.print(star);
        }
        if (i > 1) {
            System.out.print(star);
            if (i - 1 >= j) {              // <-- change made in this if-block only
                System.out.print(undrscr);
            }
            if (j == i) {
                System.out.print("");
            }
        }
    }
    System.out.println();
}

在打印下划线之前,请检查是否i - 1 >= j,因为根据您的要求,下划线的数量总是比星的数量少1

答案 2 :(得分:0)

尝试一下:

//i was the rowNum and the number of stars of that row
for (int rowNum = 0; rowNum<=rows; rowNum++) {
    int numStars = 0;
        while (numStars<rowNum) {
            System.out.print(star+undrscr);
            numStars++;
        }
        System.out.println(star);
    }

输出:

*
*_*
*_*_*
*_*_*_*
*_*_*_*_*
*_*_*_*_*_*

编辑:更好地使用这种方法,您将获得5行而不是6行。

for (int rowNum = 1; rowNum<=rows; rowNum++) {
    int numStars = 1;
    while (numStars<rowNum) {
        System.out.print(star+undrscr);
        numStars++;
    }
    System.out.println(star);
}

答案 3 :(得分:0)

尝试一下。

    int row = 5;
    String star = "*";
    String undrscr = "_";
    String s;
    for (int i = 1; i <= row; i++) {
        for (int j = 1; j <= i; j++) {

            System.out.print(star);
            if (i != j)
                System.out.print(undrscr);
        }

        System.out.println();
    }

答案 4 :(得分:0)

在这种情况下,星星按排的顺序递增(即第一排1颗星,其次是2颗星,依此类推)。

逐步执行描述性逻辑,以打印带有下划线图案的直角三角形星星。

1)输入要从用户打印的行数。我们通过了5行。

2)要遍历行,请从0到5运行一个外部循环,循环结构为(i = 0; i <= 5; i ++)。

3)要遍历列,请运行一个从0到i的内部循环,循环结构为(j = 0; j <= i; j ++)。在内圈打印星内部。

4)在列循环中,我们检查i == j是否仅打印星号,否则打印星号和下划线。

5)打印一行的所有列后,移至下一行,即打印新行。

 int i, j;
      for(i=0; i<5; i++)
      {
          for(j=0; j<=i; j++)
          {
             if(i==j)
             {
                 System.out.print("*");
             }
             else
             {
              System.out.print("*");
              System.out.print("_");
             }
          }
          System.out.println();
      }