我想使用“*”字符创建沙漏。例如,如果用户输入为5,那么它将如下所示:
*****
***
*
***
*****
和3看起来像这样:
***
*
***
到目前为止,我有:
public static void draw(int W){
stars(W);
if (W > 1) {
draw(W-1);
stars(W);
}
}
public static void stars(int n){
System.out.print("*");
if(n>1) stars(n-1);
else System.out.println();
}
并创建
*****
****
***
**
*
**
***
****
答案 0 :(得分:1)
Java中的完整解决方案
public static void draw(int w){
draw(w, 0);
}
public static void draw(int W, int s){
stars(W, s);
if (W > 2) {
draw(W-2, s+1);
stars(W, s);
}
}
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();
}
}
引入了参数s来跟踪中心星号所需的空格数 另一种方法是使用一些全局参数来跟踪总宽度并进行减法,但你似乎非常喜欢递归。
此代码
for(int i = 1; i < 7; i++){
System.out.println("An hourglass of width " + i);
draw(i);
System.out.println();
}
现在输出这个
An hourglass of width 1
*
An hourglass of width 2
**
An hourglass of width 3
***
*
***
An hourglass of width 4
****
**
****
An hourglass of width 5
*****
***
*
***
*****
An hourglass of width 6
******
****
**
****
******
答案 1 :(得分:0)
伪代码:
function stars(n):
c1 = 0
c2 = n
for i = 1 to n
print ' ' * c1
print '*' * c2
if (i < (n+1) / 2):
c1 ++;
c2 -=2;
else:
c1--
c2 +=2
print newline
这应该让你接近你的答案......现在翻译成java
**注意 - 这适用于奇数。您甚至可能需要调整n **