我正在尝试在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();
}
}
答案 0 :(得分:1)
使用递归解决这个问题要容易得多:
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
行的两条线! (它们更长!)答案 1 :(得分:0)
好吧我会咬人吗p>
所以我们的目标是打印出三角形的星星。好吧,我们需要某种循环,可能还有另一个内部循环。而且我们知道它是对称的,因为它是一个三角形。
所以我开始打印第一半:
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
在那之后我们需要处理三角形的后半部分,因为我们已经走到输入值意味着我们可以把它放回去。
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
几乎抓住了我的小技巧是在第二个之前减去两个,如果你不这样做,你会得到错误的答案。我会留下弄清楚为什么由你决定。如果伪代码表示混淆,请询问。
答案 2 :(得分:0)
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
变量