2014-08-29 55 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