如何在java中绘制沙漏

时间:2014-08-26 05:57:40

标签: java

我只需要一些指示。我是java新手,忙于打印沙漏的任务。我想要做的是编写程序,以便它接受来自用户的char,然后在控制台中输出沙漏。这是说明。

在这个问题中,您的任务是完成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();
}

但这只会用星号打印出来。我正在考虑像这样开始我的方法

public static void printHourglass(int size,char symbol)

我显然不想复制其他人的代码,所以请给我一些关于如何让他的方法工作的指示。

感谢

2 个答案:

答案 0 :(得分:1)

您可以使用递归。

要打印一行,您需要以下

  • 绘制沙漏(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);
}

答案 1 :(得分:0)

我从Creating an hourglass using asterisks获取代码并稍微更改了一下,这样你就可以给出角色了。您可以将draw(int w , char c)方法的名称更改为提供给您的方法名称,例如printHourglass(int w, char c)

public static void draw(int w , char c) {
    draw(w, 0, c);
}

public static void draw(int W, int s, char c) {
    stars(W, s,c);
    if (W > 2) {
       draw(W - 2, s + 1, c);
       stars(W, s,c);
    }
}

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