0

我在我的 Java 类中编写一个程序,我需要打印一个星形金字塔。我的代码如下:

    Scanner sc = new Scanner(System.in);
    System.out.print("Enter a number between 1 and 20: ");
    int value = sc.nextInt();
    System.out.println("Pattern B: ");
    for(int x = 1; x <= value; x++){
      for(int y = value; y>=x; y-- ){
           System.out.print("*");
     }
       System.out.print("\n");

      }

我的结果打印一行 5 星,然后是 4、3、2、1(如果用户输入数字 5)。我想要的是让星星都被推到右边。如:

一行5星,(空格)一行4星,(二空格)一行3星,(三空格)一行2星,(四空格)一行一星

我说得有道理吗?

我应该引入一个 if then 语句,检查变量 y 并相应地增加空格吗?如果我让你感到困惑,我很抱歉。

4

3 回答 3

5

您可以执行以下两项操作之一:

  • 在循环中引入另一个for循环,该x for循环将循环x时间,print x空格字符,或
  • 修改y for循环以从1through运行value,然后在if其中添加一条语句来决定是打印空格还是*.
于 2013-10-31T18:04:47.570 回答
0

您可以在打印星星之前引入一个新for循环来打印所需数量的空白:

Scanner sc = new Scanner(System.in);
System.out.print("Enter a number between 1 and 20: ");
int value = sc.nextInt();
System.out.println("Pattern B: ");
for(int x = 1; x <= value; x++){
    for(int c = value-x; c<value; c++){
        System.out.print(" ");
    }
    for(int y = value; y>=x; y-- ){
        System.out.print("*");
    }
    System.out.print("\n");
}
于 2013-10-31T18:08:43.277 回答
0

请记住,如果您想要一个真正的金字塔,您将不得不跳过每 2 个数字。例如,如果您选择 5,并决定为每个数字打印一行,直到 0,这是您可以做的最好的事情:

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

如果你跳过,你会得到这样的东西:

*****
 ***
  *

现在你只需要看看你离你的基地有多远以获得空间的数量,除以2,你就有了你之前和之后的空间。

你可以尝试这样的事情:

    int spacing;

    for(int x = 0; x < value; x=x+2){
          for(int y = value; y>x; y-- ){
               spacing = x/2;

               for(int i = 0; i < spacing; ++i)
                  System.out.print(" ");

               System.out.print("*");

               for(int i = 0; i < spacing; ++i)
                  System.out.print(" ");
           }
           System.out.print("\n");

     }
于 2013-10-31T18:11:53.603 回答