2013-10-23 172 views
3

我正在嘗試一些Java在線練習。我做了很多的練習,但我被困在這其中,對於一個給定的n表示(其中n是用戶輸入)如果n = 4,畫出一棵聖誕樹,看起來像這樣:用「X」繪製聖誕樹

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

小心的在你頭上的「傾斜」。 (我認爲你的意思是「循環」。) – rgettman

+1

請注意,這可以看作是繪製4個三角形,一個在另一個之上。每個三角形的底部分別是1,3,5和7個X的第一行。這種重複的性質可以用來推導出一個公式。或者,也許是作弊,用合適的基數調用「繪製三角形」方法適當的次數。 – user2864740

+0

Emm,*繪製聖誕樹*,我認爲這是早,下個月回來xD :) – Azad

回答

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 
+0

我真的很感謝你的時間和精力,libik :) – Emanuel

+0

歡迎你,不要忘記標記這個答案爲「接受」 :) – libik