我正在做一个作业,要求用户输入1-15之间的整数,然后显示他们选择的行数的整数金字塔。

我可以正常工作,但是如果数字输入的整数大于10,那么我会被两位数数字所需的额外空间绊倒。我在下面附加了我的代码。如果有人可以提供一点帮助,将不胜感激。

int lines = input.nextInt();
for (int row = 1; row <= lines; row++)
{
    for (int column = 1; column <= lines - row; column++)
    {
        System.out.print("  ");
    }
    for (int num = row; num >= 1; num--)
    {
        System.out.print((num>=10)?+num:" "+num);
    }
    for (int num = 2; num <= row; num++)
    {
        System.out.print((num>=10)?+num:" "+num);
    }
    System.out.println();
}


使用我当前的代码,如果用户输入13,它将产生以下输出:

                         1
                       2 1 2
                     3 2 1 2 3
                   4 3 2 1 2 3 4
                 5 4 3 2 1 2 3 4 5
               6 5 4 3 2 1 2 3 4 5 6
             7 6 5 4 3 2 1 2 3 4 5 6 7
           8 7 6 5 4 3 2 1 2 3 4 5 6 7 8
         9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9
       10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 910
     11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11
   12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12
 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13


我只需要弄清楚如何获得两位数整数的额外空间。所需的输出将是:

                         1
                       2 1 2
                     3 2 1 2 3
                   4 3 2 1 2 3 4
                 5 4 3 2 1 2 3 4 5
               6 5 4 3 2 1 2 3 4 5 6
             7 6 5 4 3 2 1 2 3 4 5 6 7
           8 7 6 5 4 3 2 1 2 3 4 5 6 7 8
         9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9
      10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10
   11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11
12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12

最佳答案

看来您已选择(略)困难的方式执行此操作。

一种简单的方法是为每个数字保留三个空格(这样一位数字之间便会有两个空格)。

您要选择的是可变间距,具体取决于每列中数字的实际长度。第一步是将输出语句更改为以下内容:

    System.out.print(" "+num);


因此,您将始终在每一行的数字之间打印一个空格。如果运行该命令,您会注意到它几乎可以正常工作,只是三角形的顶部未对齐。要解决此问题,您必须调整您的

    System.out.print("  ");


语句,以便它在每列中打印的空格数取决于以后将在每列中出现的数字的值。为此,您必须制定一些涉及columnlines的算法,以便在" "(两个空格)和" "(三个空格)之间进行选择。简单明了,但我会让您详细说明。

可以进一步扩展此思想以支持100条或更多条线路,但是尚不清楚您是否需要该功能。

09-10 05:55
查看更多