2016-05-01 47 views
2

我需要繪製一個Java聖誕節樹行給出n個,但不知道如何它通常被繪製這樣的:繪製一個Java聖誕樹有標籤和asteriks

 * 
    *** 
    ***** 
    ******* 

,但就是這樣,用分離 - 標籤:

   * 
     *  * 
    *  *  * 
*  *  *  * 

我到目前爲止的代碼是這樣的:

public static void main(String[] args) { 
     int i =5;       
     for(;i!=0;i--) { 
      for(int j=0; j!=i; j++);   
       System.out.print("\t\t*"); 

我終於由我自己寫的代碼:

int x = 5; 
     for(int i=1; i<=x; i++) 
     { 
      for (int k=0; k<x-i; k++) 
      { 
       System.out.print("\t"); 
      } 
      for (int j=0; j<i; j++) 
      { 

       System.out.print("\t*\t"); 
      } 
       System.out.println(""); 
     } 

    } 

} 
+0

您似乎有一個錯字:'''for(int j = 0; J =!;的J - );'''。那聲明現在什麼都不做。 –

+0

@JornVernee「該聲明現在什麼都不做」,否則該行會插入一個長時間的等待,除非優化器足夠聰明。 – MikeCAT

+3

你忘了...提問。 –

回答

2

這行了行星星

public static void main(String[] args) 
{ 

    int n = 6; 
    int i = 0; 
    int pad = 7; 
    while (i < n) 
    { 

     String star = new String(new char[1 + i *2]).replace("\0", "*\t"); 
     String space = new String(new char[1 + pad]).replace("\0", "\t"); 
     System.out.printf(space + star + "\n"); 
     ++i; 
     --pad; 
    } 

} 

編輯 這種交替他們按你的演示

public static void main(String[] args) 
{ 
    final int it = 5; 
    int pad = it; 
    int i = 0; 
    String space; 
    while (i < it) { 
     String star = new String(new char[i + 1]).replace("\0", "*\t\t"); 

     space = new String(new char[pad]).replace("\0", "\t"); 

     System.out.printf(space + star + "\n"); 
     ++i; 

     --pad; 

    } 

} 

與做了循環

public static void main(String[] args) 
{ 
    //final int it = 5; 
    int size; 
    size = 5; 

    for(int i = 1; i < size; ++i) 
    { 
     String star = ""; 
     for (int p = size; p > i; --p) 
     { 
      star += "\t"; 
     } 
     for (int j = 0; j < i; ++j) 
     { 
      star += "*\t\t"; 
     } 

     System.out.println(star); 


    } 

} 

僅使用2個迴路的另一種解決方案

public static void main(String[] args) 
{ 
    //final int it = 5; 
    int size; 
    size = 5; 
    List<String> pad = new ArrayList<String>(); 
    pad.addAll(Arrays.asList("\t","\t","\t","\t","\t")); 
    for(int i = 1; i < size; ++i) 
    { 
     String star = ""; 
     //Pattern p = Pattern.compile("([)|(,)|(])"); 
     star += pad.toString().replaceAll("\\[|\\]|,", ""); 
     for (int j = 0; j < i; ++j) 
     { 
      star += "*\t\t"; 
     } 
     pad.remove(pad.size()-1); 
     System.out.println(star); 

    } 

} 
+0

隨時接受我的解決方案,如果它不適合您的需求,讓我知道 – PSD

+0

這可以做到這一點,我想要的工作!謝謝。 但是我認爲只有使用「for」循環才能做到這一點。 –

+0

是的,給我一分鐘得到它的工作 – PSD

1

如果您想繪製根據行數的聖誕樹,你可能是一個Java程序,這樣以後:

int rows = 5; 
int i = ((rows-1)*2) + 1; 
String pattern = ""; 
for(int j = 0; j <= (i/2); j++) { 
    String spaces = ""; 
    for (int k = 0; k < ((i/2)-j); k++) { 
     spaces += " "; 
    } 
    pattern += spaces; 
    for (int k = 0; k < (i-(((i/2)-j)*2)); k++) { 
     pattern += "*"; 
    } 
    pattern += spaces+"\n"; 
} 
System.out.println(pattern); 

,你調整可變行調整高度的聖誕樹。 我用空格縮進樹,tab可以用寬度相對調整。 當然,最好的方法是使用printf,但這可能是創建您在第一個塊中顯示的聖誕樹時最直接的方法。

+0

您建議的代碼打印另一種聖誕樹。請注意我在問題中提到的聖誕樹的方式。 –