在框架中绘制 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");
}
}
}
从 -n
到 n
的两个嵌套 for 循环 和几个 if else 语句 。零点在菱形的中心。
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
+----------+
| /\ |
| /--\ |
| /====\ |
| /------\ |
|<========>|
| \------/ |
| \====/ |
| \--/ |
| \/ |
+----------+
另请参阅:
我正在尝试在框架中画出钻石。我想办法通过了上半场,但是当我来到下半场时,我试图反转循环,结果出现了问题。我只是为了查看结果而尝试切换运算符,但仍然没有任何效果。请帮忙。我没看到什么。
// 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");
}
}
}
从 -n
到 n
的两个嵌套 for 循环 和几个 if else 语句 。零点在菱形的中心。
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
+----------+
| /\ |
| /--\ |
| /====\ |
| /------\ |
|<========>|
| \------/ |
| \====/ |
| \--/ |
| \/ |
+----------+
另请参阅: