我是java的新手,我在尝试获取所需的输出时遇到了一些麻烦。 我正在尝试使用java中的嵌套循环制作Diamond轮廓图案。我需要的输出是:
1
2 2
3 3
4 4
3 3
2 2
1
行数基于用户输入。 到目前为止,我可以想出这个:
public static void drawDiamond(int n) {
int space = n - 1;
for (int i = 1; i <= n; i++) {
for (int j = space; j >= 1; j--)
System.out.print(" ");
for(int k = 1; k <= i; k++)
System.out.print(i + " ");
System.out.println();
space--;
}
这是我输出的n = 5
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
请帮我搞定这种模式
答案 0 :(得分:0)
好的,这是你必须要看的。
左侧:
例子n = 4(与上述相同)。如果n = 4,我们需要打印5行包含2个字符的行。我们需要弄清楚每条线左侧需要多少个空间。 x是行#,y是空格数。
x y
1 3
2 2
3 1
4 2
5 3
现在我们需要一个线性函数,y = mx + b,它将创建上表 答案是y = | x-3 | +1。
现在,而不是n = 4的例子,这个线性函数对于任何n都是什么?
Y = | X-(N-1)| 1
。
或者,在java中,
int y = Math.abs(x - (n-1))+ 1;
右侧 现在,重复钻石的右侧。 X是第#行,y是所需空格数。
x y
1 2
2 4
3 6
4 4
5 2
同样,我们需要一个创建此表的线性函数 答案是y = 6- | 3-x | * 2.。
同样,对于任何一个,你都会得到
int y =(2 *(n-1)) - Math.abs((n-1) - x)* 2;
填写#而不是x并打印顶部和底部点应该很容易,下面不包括它。
做完这一切之后,我意识到顶点和底点不能是一个完美的点(不能做半空间),所以功能需要修改以下...
int secondSpace =(2 *(n-1)) - Math.abs((n-1) - i)* 2;
将成为
int secondSpace =(2 *(n-1)) - Math.abs((n-1) - i)* 2-1;
public static void drawDiamond(int n) {
int numbLinesWith2xs = 2*n - 3;
for (int i = 1; i <= numbLinesWith2xs; i++) {
int firstSpace = Math.abs(i - (n-1)) + 1;
int secondSpace = (2*(n-1)) - Math.abs((n-1) - i)*2;
printSpaces(firstSpace);
System.out.print("x");
printSpaces(secondSpace);
System.out.println("x");
}
}
public static void printSpaces(int n) {
for (int i=1; i<=n; i++) {
System.out.print(" ");
}
}
//RESULT for drawDiamond(8):
x x
x x
x x
x x
x x
x x
x x
x x
x x
x x
x x
x x
x x
包含所有内容的最终解决方案:
public static void drawDiamond(int n) {
int numbLinesWith2xs = 2*n - 3;
printSpaces(n);
System.out.println("1");
for (int i = 1; i <= numbLinesWith2xs; i++) {
int firstSpace = Math.abs(i - (n-1)) + 1;
int secondSpace = (2*(n-1)) - Math.abs((n-1) - i)*2-1;
printSpaces(firstSpace);
System.out.print(secondSpace/2+2);
printSpaces(secondSpace);
System.out.println(secondSpace/2+2);
}
printSpaces(n);
System.out.println("1");
}
1
2 2
3 3
4 4
3 3
2 2
1
答案 1 :(得分:0)
你足够接近,只是一些小改动
public static void drawDiamond(int n) {
int spaces = n - 1;
for (int i = 0; i < 2 * n - 1; i++) {
for (int j = 0; j < spaces; j++)
System.out.print(" ");
System.out.print(n - spaces);
for (int j = 0; j < (2 * n - 2 * spaces - 3); j++)
System.out.print(" ");
if (i != 0 && i != 2 * n - 2)
System.out.print(n - spaces);
if (i < ((2 * n) - 1) / 2)
spaces--;
else
spaces++;
System.out.println();
}
}