Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要帮助在Java中调整菱形吗_Java_Loops - Fatal编程技术网

需要帮助在Java中调整菱形吗

需要帮助在Java中调整菱形吗,java,loops,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

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

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();
    }
}
使用我的代码,如果用户输入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。是否有一种方法可以将
printdommond
方法输出的大小减半,使其具有正确的行数?

我可以通过调整循环边界条件来更正代码。首先,您打印的钻石顶部高度为
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);

您应该重新检查循环条件,特别是外部循环。@mike1319一点建议。您不需要在问题中包含方框代码或输出。问题如果更简洁,就会更受欢迎。@MichaelQuatrani谢谢你的建议。我编辑了代码的方框部分,这样问题就更简洁了。我刚刚试过这个代码,如果我输入一个奇数,它将返回数字-1行。它适用于正数,但在奇数情况下似乎不起作用。我认为他的代码从未处理过奇数情况。“整个事情都需要重构。”TimBiegeleisen同意。我在考虑用一种完全不同的方法来处理一个奇怪的案件。尽管如此,还是很酷!你能解释一下
Math.ceil
Math.floor
在这种情况下是如何工作的吗?
Math.ceil()
Math.floor()
允许你在
大小
为奇数的情况下有条件地跳过菱形的最宽行。在偶数的情况下,您确实希望保留重复的最宽行。@TimBiegeleisen谢谢您的帮助,我还没有被介绍过Math.ceil()或Math.floor(),因此将此作为解决方案非常酷。
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