如何使用for循环制作完美的急性三角形?

时间:2014-06-11 06:55:36

标签: 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  7  7
         8  8  8  8  8  8  8  8  8
        9  9  9  9  9  9  9  9  9  9

但是当我想要超过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
       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语句会有所帮助,但似乎没有。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

只需更改内部循环:此处为k=i-1,因为您正在检查i>9i<9,因此将排除11。 我想您正在尝试管理两位数和一位数之间的空格。但是您可以使用单i<=10i>10的双倍空格

       for (int k = 20; k > i - 1; k--) {
            if (i <= 10) {
                System.out.print(" "+(20 - i));//Single Space
            } else if (i > 10) {
                System.out.print("  "+(20 - i));//Double Space
            }
        }

注意:这个三角形可能看起来很奇怪

答案 2 :(得分:0)

应该适用于任何数量的行。虽然没有测试成千上万。

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"));
    }
}