钻石轮廓模式java使用循环

我是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 = 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 

请帮我搞定这种模式

你足够接近,只是一些小的变化

 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(); } } 

好吧,这是你必须要看的。

  1. 忽略顶部和底部点。 那些很容易画。 我们将创建一个for循环,打印每行包含2个字符的中间部分。
  2. 制作一个接受整数n并打印n个空格的方法。
  3. 计算出钻石左右两侧每条线所需的空间。 这是如何:

左边:
例子n = 4(与上述相同)。 如果n = 4,我们需要打印5行包含2个字符的行。 我们需要弄清楚每条线左侧需要多少个空间。 x是行#,y是空格数。

XY
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是所需空格数。

XY
1 2
2 4
3 6
4 4
5 2 2

同样,我们需要一个创建此表的线性函数。
答案是y = 6- | 3-x | * 2。

再说一遍,对于任何一个,你都会得到
int y =(2 *(n-1)) – Math.abs((n-1) – x)* 2;

填写#s而不是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): xx xx xx xx xx xx xx xx xx xx xx xx xx 

最终解决方案包括:

 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