2015-11-06 32 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