2015-11-05 105 views
4

調整菱形我寫了一些代碼,將打印鑽石需要幫助Java中

static void printDiamond(int size) { 
    for (int i = 0; i < size; i++) { 
     for (int a = 0; a < (size - (i + 1)); a++) { 
      System.out.print(" "); 
     } 
     System.out.print("X"); 
     for (int b = 0; b < (i * 2); b++) { 
      System.out.print(" "); 
     } 
     System.out.print("X"); 
     System.out.println(); 
    } 

    for (int i = size-1; i >= 0; i--) { 
     for (int a = 0; a < (size - (i + 1)); a++) { 
      System.out.print(" "); 
     } 
     System.out.print("X"); 
     for (int b = 0; b < (i * 2); b++) { 
      System.out.print(" "); 
     } 
     System.out.print("X"); 
     System.out.println(); 
    } 
} 

我與鑽石遇到的問題是,它會打印雙不管是什麼我輸入。所以,如果用戶要輸入一個6鑽石,它應該是這樣的:

XX 
X X 
X X 
X X 
X X 
    XX 

我的代碼,如果用戶輸入5,它打印出以下幾點:

XX 
    X X 
    X X 
X  X 
X  X 
X  X 
X  X 
    X X 
    X X 
    XX 

而不是打印出5行,它打印出10個。如果我輸入3,它將打印出6行而不是3個。看起來對於我的鑽石來說,它正在輸出它從用戶接收到的數字,然後打印出來數量乘以2.有沒有辦法讓我可以將方法輸出的大小縮小一半,使其具有正確的行數?

+0

你應該重新審視你的循環條件 - 特別是外循環。 – heuristicus

+0

@ mike1319小小的建議。你不需要在你的問題中包含盒子代碼或輸出。如果問題更簡潔,可以更好地收到問題。 –

+1

@MichaelQuatrani感謝您的建議。我編輯代碼的框部分,所以問題更簡潔。 – sam1319

回答

3

我能夠通過調整循環邊界條件來更正您的代碼。首先,您正在打印頂部您的鑽石部分,高度爲size,您是也是打印底部部分的高度爲size,總高度爲2*size

另一個大問題是你沒有處理奇數輸入,因爲所有的鑽石都以偶數的高度出現。我也糾正了這個問題。看看下面的代碼。

static void printDiamond(int size) { 
    for (int i = 0; i < (int)Math.ceil(size/2.0); i++) { 
     for (int a = 0; a < (int)Math.ceil(size/2.0) - (i + 1); a++) { 
      System.out.print(" "); 
     } 
     System.out.print("X"); 
     for (int b = 0; b < (i * 2); b++) { 
      System.out.print(" "); 
     } 
     System.out.print("X"); 
     System.out.println(); 
    } 

    for (int i = (int)Math.floor(size/2.0)-1; i >= 0; i--) { 
     for (int a = 0; a < (int)Math.ceil(size/2.0) - (i + 1); a++) { 
      System.out.print(" "); 
     } 
     System.out.print("X"); 
     for (int b = 0; b < (i * 2); b++) { 
      System.out.print(" "); 
     } 
     System.out.print("X"); 
     System.out.println(); 
    } 
} 

printDiamond(5); 
System.out.print("\n"); 
printDiamond(6); 

輸出:

XX 
X X 
X X 
X X 
    XX 

    XX 
X X 
X X 
X X 
X X 
    XX 
+0

這是否使用奇數作爲輸入? –

+0

我剛剛試過這段代碼,如果我輸入一個奇數,它將返回數字-1行。它適用於正數,但在奇數時似乎不起作用。 – sam1319

+0

我不認爲他的代碼處理了奇數情況。整個事情需要重構。 –