2016-03-25 32 views
-1

我想打一個程序,它給出了這樣的輸出:Java的圖形程序錯誤

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

其中恆星的最大數量是「N」。不過,我的代碼在這裏出了問題。幫助將不勝感激。

class test 
{ 
    public static void main(int n) 
    { 
     for(int i=1;i<=n;i++) 
     { 
      for(int j=1;j<=i;j++) 
      { 
       System.out.print("*"); 
      } 
      for(int x=n;x>=1;x--) 
      { 
       System.out.print("*"); 
      } 
      System.out.println(); 
     } 
    } 
} 

回答

2

你幾乎就在那裏 - 想象它是一個直立的三角形,然後是倒三角形。在第一個行中,有N行,每行的星號數量從1增加到N.在第二行中,每行具有遞減數量的星號,從N-1降至1:

for (int i = 1; i <= n; ++i) { 
    for (int j = 0; j < i; ++j) { 
     System.out.print('*'); 
    } 
    System.out.println(); 
} 
for (int i = n - 1; i >= 1; --i) { 
    for (int j = 0; j < i; ++j) { 
     System.out.print('*'); 
    } 
    System.out.println(); 
} 

這可能,當然,提出通過提取內for循環它創建的每一行到它自己的方法更優雅:

private static void printRow (int i) { 
    for (int j = 0; j < i; ++j) { 
     System.out.print('*'); 
    } 
    System.out.println(); 
} 

private static void main (String[] args) { 
    for (int i = 1; i <= n; ++i) { 
     printRow(i); 
    } 
    for (int i = n - 1; i >= 1; --i) { 
     printRow(i); 
    } 
} 
+1

這是做到這一點的最簡單的方法。如果你想在一個循環內完成所有工作,你可以用一堆數學......但是當你可以將它分成更小,更簡單的零件時,沒有理由這樣做。 – NAMS

+1

哇,你寫完全一樣的來,我在發佈前做了幾秒鐘......甚至變數,嚇人的狗屎! +1思想相似 – dambros