我只需要一些指针。我是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);
}