在java中使用asteriks制作沙漏

wwtsj6pe  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(240)

我知道有人问过这个问题,但我很难理解其他程序和嵌套循环,如果有人有一个技巧,遵循嵌套循环,使一个形状与星号我想知道,因为它真的让我困惑。
以下是我在多次尝试和实验后编写的代码:

Scanner input = new Scanner(System.in);
System.out.print("Enter a number: ");
int userentry = input.nextInt();
for (int i = 0; i<userentry-1; i++) {
    for (int k = 0; k<i; k++)
    {
        System.out.print(" ");
    }
    for (int j = userentry - 1; j>=i;j--)
    {
        System.out.print("*");
}
System.out.println();
}
for (int i = 0; i<userentry; i++) {
    for (int k = 0; k<i+1; k++)
    {
    System.out.print(" ");
    }
    for (int j = 0; j<=i;j++)
    {
    System.out.print("*");
}
System.out.println();
}
}
}

例如,数字条目3的输出是这样的,我在间距方面遇到了问题:


***

**

 *

**

 ***

我真的很感激有人能帮助我与我的程序,并解释我的算法,我如何才能使更多的模式。

c0vxltue

c0vxltue1#

由于用于输入/输出/代码的字体中的每个字符都具有相同的宽度,因此每次迭代必须减少2个字符,如:


****

**
**

****


*****

***

  *

***

*****

而不是一个。对于间距,请使用以下命令:

for (int i = userentry; i > 0; i -= 2) {
  for (int j = 0; j < (userentry - i) / 2; j++) System.out.print(" ");
  for (int j = 0; j < i; j++) System.out.print("*");
  for (int j = 0; j < (userentry - i) / 2; j++) System.out.print(" ");
  System.out.println();
}
for (int i = (userentry % 2 == 0 ? 2 : 3); i <= userentry; i += 2) {
  for (int j = 0; j < (userentry - i) / 2; j++) System.out.print(" ");
  for (int j = 0; j < i; j++) System.out.print("*");
  for (int j = 0; j < (userentry - i) / 2; j++) System.out.print(" ");
  System.out.println();
}

相关问题