在框架中绘制 ASCII 菱形

Draw an ASCII diamond in a frame

我正在尝试在框架中画出钻石。我想办法通过了上半场,但是当我来到下半场时,我试图反转循环,结果出现了问题。我只是为了查看结果而尝试切换运算符,但仍然没有任何效果。请帮忙。我没看到什么。

// 1st Half of Diamond

// Creates Lines
for (int i = 1; i <= 3; i++) {
    if (i == 1) {
        System.out.print("+");
        for (int h = 1; h <= 8; h++) {
            System.out.print("-");
        }
        System.out.print("+" + "\n");
    }
    System.out.print("|");

    // Nested Loop Creates Spaces Left Side
    for (int j = 4; j > i; j--) {
        System.out.print(" ");
    }
    System.out.print("/");

    // Nested Loop Creates Values Inside
    for (int j = 1; j < i; j++) {
        if (i % 2 == 0) {
            System.out.print("--");
        } else if (i == 1) {
            System.out.print("\");
        } else {
            System.out.print("==");
        }
    }
    System.out.print("\");

    // Nested Loop Creates Spaces Right Side
    for (int j = 4; j > i; j--) {
        System.out.print(" ");
    }
    System.out.print("|");
    System.out.print("\n");
}

// Midpoint of Diamond
System.out.print("|<------>|" + "\n");

//============================
//****HERE PROBLEMS ARISE****

// 2nd Half of Diamond

// Creates Lines
for (int i = 1; i <= 3; i++) {
    System.out.print("|");

    // Nested Loop Creates Spaces Left Side
    for (int j = 1; j <= i; j++) {
        System.out.print(" ");
    }
    System.out.println("\");

    // Nested Loop Creates Values Inside
    for (int j = 1; j < 2; j++) {
        System.out.print("+");
        for (int h = 1; h <= 8; h++) {
            System.out.print("-");
        }
        System.out.print("+" + "\n");
        if (i % 2 == 0) {
            System.out.print("-");
        } else if (i == 3) {
            System.out.print("/");
        } else {
            System.out.print("=");
        }
    }
}

我假设您正在尝试实现此结果:

public class Diamond {
    public static void main(String[] args) {
        // 1st Half of Diamond
        // Creates Lines
        for (int i = 1; i <= 3; i++) {
            if (i == 1) {
                System.out.print("+");
                for (int h = 1; h <= 8; h++) {
                    System.out.print("-");
                }
                System.out.print("+" + "\n");
            }
            System.out.print("|");
            // Nested Loop Creates Spaces Left Side
            for (int j = 4; j > i; j--) {
                System.out.print(" ");
            }
            System.out.print("/");
            // Nested Loop Creates Values Inside
            for (int j = 1; j < i; j++) {
                if (i % 2 == 0) {
                    System.out.print("--");
                } else if (i == 1) {
                    System.out.print("\");
                } else {
                    System.out.print("==");
                }
            }
            System.out.print("\");
            // Nested Loop Creates Spaces Right Side
            for (int j = 4; j > i; j--) {
                System.out.print(" ");
            }
            System.out.print("|");
            System.out.print("\n");
        }
        // Midpoint of Diamond
        System.out.print("|<------>|" + "\n");
        // 2nd Half of Diamond
        // Creates Lines
        for (int i = 1; i <= 3; i++) {
            System.out.print("|");
            // Nested Loop Creates Spaces Left Side
            for (int j = 1; j <= i; j++) {
                System.out.print(" ");
            }
            System.out.print("\");
            // Nested Loop Creates Values Inside
            for (int j = 1; j <= i; j++) {
                if (i == 2) {
                    System.out.print("-");
                } else if (i == 1) {
                    System.out.print("====");
                } else {
                    System.out.print("");
                }
            }
            System.out.print("/");
            // Nested Loop Creates Spaces Right Side
            for (int j = 0; j < i; j++) {
                System.out.print(" ");
            }
            System.out.println("|");
        }
        System.out.print("+");
        for (int h = 1; h <= 8; h++) {
            System.out.print("-");
        }
        System.out.print("+" + "\n");
    }
}

输出:

+--------+
|   /\   |
|  /--\  |
| /====\ |
|<------>|
| \====/ |
|  \--/  |
|   \/   |
+--------+

首先,我建议根据输出将代码整齐地分组。当您不这样做时,很难看到哪些代码块会产生什么输出。这是第一部分的清理版本(但代码完全相同):

// 1st Half of Diamond
for (int i = 1; i <= 3; i++) {
    //TOP OR BOTTOM LINE
    {
        if (i == 1) {
            System.out.print("+");
            for (int h = 1; h <= 8; h++) {
                System.out.print("-");
            }
            System.out.print("+" + "\n");
        }
    }

    //INTERIOR LINES
    {
        System.out.print("|");
        // Nested Loop Creates Spaces Left Side
        for (int j = 4; j > i; j--) {
            System.out.print(" ");
        }
        System.out.print("/");
        // Nested Loop Creates Values Inside
        for (int j = 1; j < i; j++) {
            if (i % 2 == 0) {
                System.out.print("--");
            } else if (i == 1) {
                System.out.print("\");
            } else {
                System.out.print("==");
            }
        }
        System.out.print("\");
        // Nested Loop Creates Spaces Right Side
        for (int j = 4; j > i; j--) {
            System.out.print(" ");
        }
        System.out.print("|");
        System.out.print("\n");
    }
}

输出如你所见

+--------+
|   /\   |
|  /--\  |
| /====\ |

反转 for 循环通常与反转索引一样简单,因此您将外循环更改为 for (int i = 3; i >=1; i--),输出为:

| /====\ |
|  /--\  |
+--------+
|   /\   |

您会注意到最后一行提前打印出来,因此您应该将 \TOP OR BOTTOM LINE 块切换为 \INTERIOR LINES 块,输出:

| /====\ |
|  /--\  |
|   /\   |
+--------+

现在您只需切换反斜杠和正斜杠。结果代码打印出漂亮的后半部分:

| \====/ |
|  \--/  |
|   \/   |
+--------+

代码为:

// 2nd Half of Diamond
for (int i = 3; i >= 1; i--) {
    //INTERIOR LINES
    {
        System.out.print("|");
        // Nested Loop Creates Spaces Left Side
        for (int j = 4; j > i; j--) {
            System.out.print(" ");
        }
        System.out.print("\");
        // Nested Loop Creates Values Inside
        for (int j = 1; j < i; j++) {
            if (i % 2 == 0) {
                System.out.print("--");
            } else if (i == 1) {
                System.out.print("/");
            } else {
                System.out.print("==");
            }
        }
        System.out.print("/");
        // Nested Loop Creates Spaces Right Side
        for (int j = 4; j > i; j--) {
            System.out.print(" ");
        }
        System.out.print("|");
        System.out.print("\n");
    }

    //TOP OR BOTTOM LINE
    {
        if (i == 1) {
            System.out.print("+");
            for (int h = 1; h <= 8; h++) {
                System.out.print("-");
            }
            System.out.print("+" + "\n");
        }
    }
}

-nn 的两个嵌套 for 循环 和几个 if else 语句 。零点在菱形的中心。

Try it online!

public static void main(String[] args) {
    printDiamond(5);
}

static void printDiamond(int n) {
    System.out.println("n=" + n);
    // vertical axis
    for (int i = -n; i <= n; i++) {
        // horizontal axis
        for (int j = -n - 1; j <= n + 1; j++)
            if (j == 0) continue; // skip middle vertical
            else if (Math.abs(j) == n + 1) // vertical borders & corners
                System.out.print(Math.abs(i) == n ? "+" : "|");
            else if (Math.abs(i) == n) // horizontal borders
                System.out.print("-");
            else if (i == 0 && Math.abs(j) == n) // middle left & right tips
                System.out.print(j == -n ? "<" : ">");
            else if (Math.abs(i - j) == n) // upper right & lower left edges
                System.out.print("\");
            else if (Math.abs(i + j) == n) // upper left & lower right edges
                System.out.print("/");
            else if (Math.abs(i) + Math.abs(j) < n) // inner rhombus lines
                System.out.print((n - i) % 2 != 0 ? "=" : "-");
            else // whitespace
                System.out.print(" ");
        System.out.println(); // new line
    }
}

输出:

n=5
+----------+
|    /\    |
|   /--\   |
|  /====\  |
| /------\ |
|<========>|
| \------/ |
|  \====/  |
|   \--/   |
|    \/    |
+----------+

另请参阅: