2015-11-05 108 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

我不认为他的代码处理了奇数情况。整个事情需要重构。 –