我只需要一些指示。我是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)
我显然不想复制其他人的代码,所以请给我一些关于如何让他的方法工作的指示。
感谢
答案 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();
}
}