Java 如何使用for循环生成完美的锐角三角形?

Java 如何使用for循环生成完美的锐角三角形?,java,for-loop,Java,For Loop,只是为了玩,我试着写一个程序,这样我就可以使用for循环生成一个锐角三角形,所以我的输出如下: 0 1 1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 6 7 7 7 7 7 7

只是为了玩,我试着写一个程序,这样我就可以使用for循环生成一个锐角三角形,所以我的输出如下:

                 0
                1  1
               2  2  2
              3  3  3  3
             4  4  4  4  4
            5  5  5  5  5  5
           6  6  6  6  6  6  6
          7  7  7  7  7  7  7  7
         8  8  8  8  8  8  8  8  8
        9  9  9  9  9  9  9  9  9  9
                 0
                1  1
               2  2  2
              3  3  3  3
             4  4  4  4  4
            5  5  5  5  5  5
           6  6  6  6  6  6  6
          7  7  7  7  7  7  7  7
         8  8  8  8  8  8  8  8  8
        9  9  9  9  9  9  9  9  9  9
       10  10  10  10  10  10  10  10  10  10  10


12           12           12           12           12           12           12           12           12           12           12           12           12
但是,当我想超过10次时,我的锐角三角形就会像这样混乱:

                 0
                1  1
               2  2  2
              3  3  3  3
             4  4  4  4  4
            5  5  5  5  5  5
           6  6  6  6  6  6  6
          7  7  7  7  7  7  7  7
         8  8  8  8  8  8  8  8  8
        9  9  9  9  9  9  9  9  9  9
                 0
                1  1
               2  2  2
              3  3  3  3
             4  4  4  4  4
            5  5  5  5  5  5
           6  6  6  6  6  6  6
          7  7  7  7  7  7  7  7
         8  8  8  8  8  8  8  8  8
        9  9  9  9  9  9  9  9  9  9
       10  10  10  10  10  10  10  10  10  10  10


12           12           12           12           12           12           12           12           12           12           12           12           12
我的代码如下

public class Triangel {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        for (int i = 20; i > 0; i--) {
            for (int j = i - 1; j > 0; j--) {
                System.out.print(" ");
            }
            for (int k = 20; k > i - 1; k--) {
                if (i =< 9) {
                    System.out.print("           " + (20 - i));
                } else if (i > 9) {
                    System.out.print( "  "+(20 - i));
                }
            }
            System.out.println();
        }
    }
}
当我想在9点后打印时,你知道我怎样才能使它成为完美的锐角三角形吗


注意:我认为if语句会有帮助,但似乎没有。

如果要打印单个数字,可以在每个数字后面加一个空格,以匹配两位数的长度。这样你就可以达到99


在更大范围内应用此方法只意味着您必须在主循环之前进行检查,这将告诉您最大数字的长度,如果较短的数字带有空格,则会补偿长度差。

只需更改内部for循环:此处为k=i-1,因为您正在检查i>9,并且i应适用于任意数量的行。但还没有测试过数千人

public static void main(String[] args) {
    int maxRows = 14;
    int spaces = String.valueOf(maxRows).length();

    for (int i = 1; i <= maxRows; i++) {            // for each row
        for (int j = 1; j <= maxRows - i; j++) {    // add spaces to the left
            for (int l = 1; l <= spaces; l++) {     // according to number of digits
                System.out.print(" ");
            }
        }
        for (int k = 1; k <= i; k++) {              // for each column
            System.out.print(i);
            for (int l = String.valueOf(i).length(); l <= spaces * 2 - 1; l++) {    // add spaces inbetween
                System.out.print(" ");
            }
        }
        System.out.print(System.getProperty("line.separator"));
    }
}

你真的应该能够自己思考这个问题。这只是印刷的方式创造了差异。您可以添加更多空格字符,使其看起来像一个锐角三角形。屏幕中的每个数字都限制在特定的像素数内。如果您想要一个大于9的数字,表示您使用的是2位数字,则此协议被破坏,因此输出中没有对称性。那么你期望什么呢?@Eypros你看到我的if语句部分了吗?你说的是个位数吗?@kickbuttowski个位数是0-9个,双位数是10-99个,依此类推。。数字的字符长度谢谢你。我以后再看。你能不能也运行我的代码,告诉我发生了什么?在你的if语句中,你缺少了i==9的情况。这就是为什么它写了一个空行。还有什么你想知道的吗?谢谢你,我稍后再看。你能告诉我这个三角形看起来有点奇怪吗?你觉得我的方法怎么样?