需要帮助调整Java中的钻石形状

时间:2015-11-05 05:33:28

标签: java loops

我写了一些会打印钻石的代码

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.有没有一种方法,我可以输出printDiamond方法输出的一半,所以它有正确的行数?

1 个答案:

答案 0 :(得分:3)

我能够通过调整循环边界条件来纠正您的代码。首先,您正在打印高度为size的钻石的顶部部分,而您打印高度为{{1}的底部药水},总高度为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);