我想打印下面的图案
* *************** * * * * * * * * * * * * * * * * * * *************** *
我可以使用以下代码在模式中打印两个外部金字塔:
public static void main(String[] args) {
int n = 8;
int i, j;
for (i = 1; i <= n; i++) {
for (j = i; j < n; j++) {
System.out.print(" ");
}
for (j = 1; j <= (2 * i - 1); j++) {
if (i == n || j == 1 || j == (2 * i - 1)) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.print("\n");
}
for (i = n; i >= 1; i--) {
for (j = i; j < n; j++) {
System.out.print(" ");
}
for (j = 1; j <= (2 * i - 1); j++) {
if (i == n || j == 1 || j == (2 * i - 1)) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.print("\n");
}
}
将图案打印为
* * * * * * * * * * * * * *************** *************** * * * * * * * * * * * * *``
但如何将这两者结合起来形成星形呢?
答案 0 :(得分:2)
既然你没有说明你的限制是什么......
public static void main(String[] args) {
System.out.println(" * ");
System.out.println("***************");
System.out.println(" * * * * ");
System.out.println(" * * * * ");
System.out.println(" * * ");
System.out.println(" * * * * ");
System.out.println(" * * * * ");
System.out.println("***************");
System.out.println(" * ");
}
现在很明显这不是你打算做的,但下次如果你对你的要求更具体一点会有所帮助,例如:“我必须只使用for
循环“,”我不允许一次打印多个字符“,”代码必须能够打印给定宽度的任何星号“等。
因为如果没有这些限制,那么最好的方法就是打印如上所述的ASCII行。
答案 1 :(得分:1)
您可以暂时将打印存储在2D char
数组中并修改两次,然后使用for
循环打印数组。
public static void main(String[] args) {
int n = 8;
char[][] temp = new char[][];
Arrays.fill(temp, ' ');
int i, j;
for (i = 1; i <= n; i++) {
for (j = 1; j <= (2 * i - 1); j++) {
if (i == n || j == 1 || j == (2 * i - 1)) {
temp[i][j] = '*';
}
}
}
for (i = n; i >= 1; i--) {
for (j = 1; j <= (2 * i - 1); j++) {
if (i == n || j == 1 || j == (2 * i - 1)) {
temp[i][j] = '*';
}
}
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
System.out.print(temp[i][j]);
System.out.println();
}
}
答案 2 :(得分:0)
在我看来,你的循环是相同的,除了一个代码块是递增的,一个代码块正在下降。您可以组合twp代码块,并使用第三个整数k来处理其他模式。
public static void main(String[] args) {
int n = 8;
int i, j, k;
for (i = 1; i <= n; i++) {
k = n - i;
for (j = i; j < n; j++) {
if (/* TODO: handle k case */) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
for (j = 1; j <= (2 * i - 1); j++) {
if (i == n || j == 1 || j == (2 * i - 1)) {
System.out.print("*");
} else if (/* TODO: handle k case */) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.print("\n");
}
}
有意义吗?