2014-08-29 58 views
0
public static void printHourglass(int size , char symbol) { 
    printHourglass(size, 0, symbol); 
} 

public static void printHourglass(int size, int s, char symbol) { 
    stars(size, s,symbol); 
    if (size > 2) { 
     printHourglass(size - 2, s + 1, symbol); 
     stars(size, s,symbol); 
    } 
} 

public static void stars(int n, int s, char symbol) { 
    if (s > 0) { 
     System.out.print(" "); 
     stars(n, s - 1 , symbol); 
    } else if (n > 0) { 
     System.out.print(symbol); 
     stars(n - 1 , s, symbol); 
    } else { 
     System.out.println(); 
    } 
} 

我的代碼是一點好,但我想它的結果是這樣誤差在空間printHourglass

鑑於沙漏的大小爲5 printHourglass()的預期輸出: 的黑色痕跡是空格,我希望我的代碼打印下面的空格

備註:以下輸出中的空格表示爲黑盒子,新行顯示爲段落標記(¶)。

????? 
█???█ 
██?██ 
█???█ 
????? 

我的代碼輸出,現在是這樣的,而不在右側空間如何,並希望它打印像上面的空間:

?????¶ 
█???¶ 
██?¶ 
█???¶ 
?????¶ 

失敗

see this link please

+0

你可以分享你的代碼不僅部分的工作示例。 – Jens 2014-08-29 10:28:40

+0

格式化代碼(intendation)可能有幫助... – Thomas 2014-08-29 10:28:47

+0

那是我的整個代碼先生 – 2014-08-29 10:30:25

回答

0
int subtract = (int)Math.floor(size/2); 

    for(int i = size - subtract; i >= 1; i--){ 

     for(int j=i;j<size - subtract;j++){   
      System.out.print(' '); 
     } 

     for(int j=1;j<=i*2-1;j++){   
      System.out.print(symbol); 
     } 

     for(int j = i; j < size - subtract; j++){ 
     System.out.print(' '); 
     } 

      System.out.println(); 
    } 

    for(int i = 2; i <= size - subtract; i++) 
    { 

    for(int j=i;j<size - subtract;j++){ 
     System.out.print(' '); 
     } 

    for(int j=1;j<=i*2-1;j++){   
     System.out.print(symbol); 
     } 

    for(int j = i; j < size - subtract; j++){ 
     System.out.print(" "); 
     } 

     System.out.println(); 
    } 

感謝每一個誰試圖幫助我和ID的答案

0

如果你改變你的星星方法簽名如下,你應該能夠解決它

public static void stars(int size, int beg, int end, char symbol) 
+0

請先生,請多多指教,謝謝你的幫助 – 2014-08-29 11:02:50

+0

@Javabeginner As你正在遞歸地工作,你不能跟蹤一個變量的開始和結束空格,所以使用兩個。 – 2014-08-29 11:09:15

+0

我不想跟蹤它我只是想在右側添加空格而不是黑色標記 – 2014-08-29 11:40:46