2015-11-06 31 views
2

我需要画一个数字的钻石,例如与9高度:图纸数字钻石

1 
    222 
    33333 
4444444 
555555555 
4444444 
    33333 
    222 
    1 

我写的代码,我设法得到相同的钻石,但星星。我想要这些数字。我怎样才能做到这一点?以下是我迄今所做的:

for (int i = 1; i < 10; i += 2) { 
    for (int j = 0; j < 9 - i/2; j++) 
     System.out.print(" "); 

    for (int j = 0; j < i; j++) 
     System.out.print("a"); 

    System.out.print("\n"); 
} 

for (int i = 7; i > 0; i -= 2) { 
    for (int j = 0; j < 9 - i/2; j++) 
     System.out.print(" "); 

    for (int j = 0; j < i; j++) 
     System.out.print("b"); 

    System.out.print("\n"); 

} 
+0

用'i'更换'stars'或'j'我要去承担其用'j' – 3kings

+0

http://codegolf.stackexchange.com/questions/8696/print-this-diamond - 不是你想要的,但一些有趣的方法... –

回答

0

请尝试以下代码(我测试),仅修改两处print

public static void main(String[] args) throws Exception { 
    for (int i = 1; i < 10; i += 2) { 
     for (int j = 0; j < 9 - i/2; j++) 
      System.out.print(" "); 

     for (int j = 0; j < i; j++) 
      System.out.print(i/2+1); // Change here 

     System.out.print("\n"); 
    } 

    for (int i = 7; i > 0; i -= 2) { 
     for (int j = 0; j < 9 - i/2; j++) 
      System.out.print(" "); 

     for (int j = 0; j < i; j++) 
      System.out.print(i/2+1); // Change here 

     System.out.print("\n"); 

    } 
} 

输出:

 1 
    222 
    33333 
    4444444 
555555555 
    4444444 
    33333 
    222 
    1 
2

关于您的代码:

  • System.out.print("\n");应替换为System.out.println()
  • 你应该动态的高度,而不是硬编码9
  • 它打印正确的模式,只有什么是印刷错误的是:而不是打印"a""b",应打印循环的指数,看看你可以从那里得到。这是郭崇庭解决方案。

你可以用更少的循环做到这一点,在我看来更容易理解。考虑下面的算法:

  • 对于图案中的每一行(这样的行从0到height除外)
  • 对于图案的每列(所以列从0到height除外)
  • 当我们位于图的右上角,左上角,右下角或左下角时,我们需要打印一个空格。
    • 上部左侧:这是当所述列是小于height/2-row-1
    • 左下:这是当所述列是小于row-height/2
      • 在单一一个保理这两个表达式,这是当列小于height/2 - min其中min = Math.min(row+1, height-row)
    • 右上:这是当所述列是大于height/2+row+1
    • 右下:这是当所述列是大于height/2+height-row
      • 在单一一个保理这两个表达式,这是当列大于height/2 + minmin = Math.min(row+1, height-row)
  • 否则,我们需要打印Math.min(row+1, height-row)

谈到为代码:

public static void main(String[] args) { 
    int height = 9; 
    for (int row = 0; row < height; row++) { 
     for (int column = 0; column < height; column++) { 
      int min = Math.min(row+1, height-row); 
      if (column <= height/2 - min || column >= height/2 + min) { 
       System.out.print(" "); 
      } else { 
       System.out.print(min); 
      } 
     } 
     System.out.println(); 
    } 
} 

输出示例:

1  
    222 
    33333 
4444444 
555555555 
4444444 
    33333 
    222 
    1  
+0

谢谢你,我现在明白了! – davido

+0

@davido考虑[接受](http://meta.stackexchange.com/q/5234)对您最有帮助的答案。 – Tunaki