[英]Printing a sideways triangle in java
我正在尝试在Java中打印一个横向三角形。 如果用户输入5,则输出应为:
*
***
*****
***
*
如果用户输入6,则输出应为:
*
***
*****
*****
***
*
我已经使它适用于用户输入5、3或1的情况,但是我的代码似乎仅适用于这三种情况。 我想知道是否有人可以帮助我使我的代码在更多情况下正常工作。 这里是:
public void printArrow( int n )
{ int asterisks = 1;
for ( int i = 0; i <= n/2; i++ )
{
for ( int j = i; j < asterisks; j++ )
{
System.out.print( "*" );
}
asterisks += 3;
System.out.println();
}
asterisks = asterisks / 2 - 2;
for ( int i = 0; i < n/2; i++ )
{
for ( int k = i; k < asterisks; k++ )
{
System.out.print( "*" );
}
if ( i == 1 )
{
System.out.print( "*" );
}
asterisks -= 2;
System.out.println();
}
}
使用递归解决这个问题要容易得多:
static String triangle(int n, String s) {
return
n == 0 ? "" :
n == 1 ? s :
s
+
triangle(n - 2, "**" + s)
+
s
;
}
public static void main(String args[]) {
System.out.println(triangle(6, "*\n"));
}
三角形的结构不言而喻:
n == 0
? 不行! n == 1
? 一条线! n - 2
行! (更长!) 好吧,我会咬
因此,目标是打印出三角形的星星。 好吧,我们将需要某种类型的循环,可能需要另一个内部循环。 而且我们知道它将是对称的,因为它是一个三角形。
所以我将从打印拳头开始:
function triangle( input )
i <- 1
while i < input do
for j from 1 to i do
print "*"
end for
i <- i + 2
print "\n"
end while
之后,我们需要处理三角形的下半部分,因为我们已经使i上升到输入值,这意味着我们可以将其回退。
if i > input then i <- i - 2
while i > 0 do
for j from 1 to i do
print "*"
end for
i <- i - 2
print "\n"
end while
end function triangle
几乎让我着迷的一个小窍门是在第二秒之前减去两个,如果您不这样做,则会得到错误的答案。 我将找出原因由您决定。 如果伪代码表示法令人困惑,请询问。
double middle = ((double) lines) / 2;
int asterisks = 1;
for (int i = 1; i <= lines; i ++){
for (int k = 0; k < asterisks; k ++) {
System.out.print("*");
}
if (i < middle) {
asterisks += 2;
} else if (i > middle){
asterisks -= 2;
}
System.out.println();
}
说明:
lines
是输入数字(3、4、5、6、7等) x.5
asterisks
变量中的一样多
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.