我只需要一些指针。我是Java的新手,正忙着打印沙漏的任务。我想做的是编写程序,以便它将接受用户的字符,然后在控制台中输出沙漏。这是指示。

在这个问题中,您的任务是完成printHourglass(int,char)方法的实现,以打印出特定大小和符号的沙漏。

使用说明

给定参数size = n和字符符号。

您可以假设n为正奇数。

沙漏由n条线组成。

字符符号将在每行中出现多次。该符号将在第一行中出现n次。在随后的每一行中,符号打印的次数将减少2,直到达到1。此后,在随后的每一行中,符号打印的次数将被增加2,直到再次达到n。
在每行的开头和结尾添加空格,以使每行的总宽度为n,并且每行中的符号在每行的中心对齐。

对于输出,可以使用System.out.print()/ println()或IO.output()/ outputln()。

我已经在网上看到了很多帖子,但是没有一个可以接受任何输入或要求用户输入或沙漏应该有多大。我发现可行的一种方法是输出沙漏的方法

public static void stars(int n, int s){
    if(s > 0){
        System.out.print(" ");
 stars(n, s-1);
} else  if (n > 0){
    System.out.print("*");
    stars(n-1, s);
} else {
    System.out.println();
}


但这只会打印一个星号。我在想像这样开始我的方法

公共静态无效printHourglass(int size,char symbol)

我显然不想复制其他人的代码,所以请给我一些有关如何使他的方法起作用的提示。

谢谢

最佳答案

您可以使用递归。

要打印一行,您需要以下内容


绘制沙漏的字符(char character
您从用户读取的奇数(int oddNumber
正在绘制的当前行的索引(int currentLine


对于任何奇数,例如n,沙漏有n条线。

码:

import java.util.Arrays;

public static void main(String[] args) throws java.lang.Exception {
    int oddNumber = 5;
    char character = '#';
    hourglass(oddNumber, character, 0);

}

public static void hourglass(int oddNumber, char character, int currentLine) {
    if (currentLine == oddNumber) {
        return;
    }

    int patternLength = 0;

    int mid = (oddNumber + 1) / 2;

    if (currentLine < mid) {
        patternLength = oddNumber - (currentLine * 2);
    } else {
        patternLength = 2 * (currentLine - mid + 1) + 1;
    }

    char[] whitespace = new char[(oddNumber - patternLength)/2];
    Arrays.fill(whitespace, ' ');

    char[] pattern = new char[patternLength];
    Arrays.fill(pattern, character);
    System.out.println(new String(whitespace) + new String(pattern));

    hourglass(oddNumber, character, currentLine + 1);
}

10-08 18:43