用“X”画一棵圣诞树

3
我在尝试一些Java的在线练习。我完成了很多练习,但我卡在了这个练习上,要求为给定n(n是用户输入),如果n = 4,则画一个看起来像这样的圣诞树:
   X
   X
  XXX
   X
  XXX
 XXXXX
   X
  XXX
 XXXXX
XXXXXXX

我似乎无法理解循环。到目前为止,这是我所做的:

public class Test {

    public double org, mes;

    public Test() {
    }

    private static void drawChristmasTree(int n) {
        if (n == 1) {
            System.out.println("X");
        } else {
            for (int p = 1; p <= n; p++) {
                for (int i = 1; i <= n; i++) {

                    for (int j = 0; j < n - i; j++) {
                        System.out.print(" ");
                    }
                    for (int j = 0; j < (2 * i - 1); j++) {
                        //System.out.println("X");
                        System.out.print("X");
                    }
                    System.out.println();
                }
            }
        }
    }

    public static void main(String[] args) {
        drawChristmasTree(4);
    }
}

1
小心你脑袋周围的“lopping”。(我认为你的意思是“looping”。) - rgettman
1
请注意,这可以被视为绘制4个三角形,一个在另一个上面。每个三角形的底部分别是第一行具有1、3、5和7个X的行。这种重复性质可以用来推导公式。或者,也可以通过调用“绘制三角形”方法适当次数并使用适当的底部来作弊。 - user2864740
嗯,画一棵圣诞树,我觉得现在还太早了,下个月再来吧 xD :) - Azad
1个回答

7

编写制作三角形的方法,并在创建圣诞树时调用它是一个不错的做法:

public static void main(String[] args) {
    drawChristmasTree(4);
}

 private static void drawChristmasTree(int n) {
     for (int i = 0; i < n; i++) {
         triangle(i+1,n);
     }
}

 private static void triangle(int n, int max){
     for (int i = 0; i < n; i++) {
         for (int j = 0; j < max-i-1; j++) {
             System.out.print(" ");
         }
         for (int j = 0; j < i*2+1; j++) {
             System.out.print("X");
         }
         System.out.println("");
     }
 }

您需要考虑的唯一不同之处是使用的空格数目。这就是max参数,因为只有通过使某些大小的三角形不适合与其他三角形的空格接触才能完成。
因此,无论您正在构建多大的三角形,您都必须始终考虑最大三角形(最后一个)以及您需要多少空格。
仅生成纯三角形的方法如下:(只有更改max-i-1n-i-1的区别)
 private static void triangle(int n){
     for (int i = 0; i < n; i++) {
         for (int j = 0; j < n-i-1; j++) {
             System.out.print(" ");
         }
         for (int j = 0; j < i*2+1; j++) {
             System.out.print("X");
         }
         System.out.println("");
     }
 }

树的大小为10时的输出:

         X
         X
        XXX
         X
        XXX
       XXXXX
         X
        XXX
       XXXXX
      XXXXXXX
         X
        XXX
       XXXXX
      XXXXXXX
     XXXXXXXXX
         X
        XXX
       XXXXX
      XXXXXXX
     XXXXXXXXX
    XXXXXXXXXXX
         X
        XXX
       XXXXX
      XXXXXXX
     XXXXXXXXX
    XXXXXXXXXXX
   XXXXXXXXXXXXX
         X
        XXX
       XXXXX
      XXXXXXX
     XXXXXXXXX
    XXXXXXXXXXX
   XXXXXXXXXXXXX
  XXXXXXXXXXXXXXX
         X
        XXX
       XXXXX
      XXXXXXX
     XXXXXXXXX
    XXXXXXXXXXX
   XXXXXXXXXXXXX
  XXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXX
         X
        XXX
       XXXXX
      XXXXXXX
     XXXXXXXXX
    XXXXXXXXXXX
   XXXXXXXXXXXXX
  XXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX

非常感谢您的时间和努力,libik :) - emi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接