在java中打印横向三角形

在java中打印横向三角形,java,Java,我想用java打印一个横向三角形。如果用户输入5,则输出应为: * *** ***** *** * * *** ***** ***** *** * 如果用户输入6,则输出应为: * *** ***** *** * * *** ***** *****

我想用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();
    }
}
public void打印箭头(int n)
{int星号=1;
对于(inti=0;i好的,我咬

所以我们的目标是打印出一个三角形的恒星。我们需要一个某种循环,可能还有另一个内部循环。我们知道它是对称的,因为它是一个三角形

因此,我将从打印前半部分开始:

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
函数三角形(输入)
我好的,我会咬的

所以我们的目标是打印出一个三角形的恒星。我们需要一个某种循环,可能还有另一个内部循环。我们知道它是对称的,因为它是一个三角形

因此,我将从打印前半部分开始:

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
double-middle=((双)行)/2;
国际星号=1;
for(int i=1;i中间){
星号-=2;
}
System.out.println();
}
解释:

  • 是输入的数字(3、4、5、6、7等)
  • 将中间一行设为双精度。即,对于奇数,它将为
    x.5
  • 循环的行数与输入的行数相同
  • 在每一行上打印与
    星号
    变量中星号数量相同的星号
  • 在每次迭代中,如果行在中间之前,则将星号数增加2;如果行在中间之后,则将星号数减少2。这意味着如果星号数相等,则不会发生任何事情,即同一行的星号数相同。对于奇数,星号数不能相等
双中间=((双)行)/2;
国际星号=1;
for(int i=1;i中间){
星号-=2;
}
System.out.println();
}
解释:

  • 是输入的数字(3、4、5、6、7等)
  • 将中间一行设为双精度。即,对于奇数,它将为
    x.5
  • 循环的行数与输入的行数相同
  • 在每一行上打印与
    星号
    变量中星号数量相同的星号
  • 在每次迭代中,如果行在中间之前,则将星号数增加2;如果行在中间之后,则将星号数减少2。这意味着如果星号数相等,则不会发生任何事情,即同一行的星号数相同。对于奇数,星号数不能相等

使用递归更容易解决此问题:

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行之间!(哪一行更长!)

使用递归更容易解决此问题:

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行之间!(哪一行更长!)

事实上,这是我昨天参加的一个测试中的一个问题,我无法完全理解。现在我很好奇。你通过调试器跟踪了它吗?事实上,这是我昨天参加的一个测试中的一个问题,我无法完全理解。现在我很好奇。你通过调试器跟踪了它吗?谢谢你的回答。我明天会详细查看它。这里很晚了,我明天必须早起。再次感谢!谢谢你的回复。我明天会详细查看。这里很晚了,我明天必须早起。再次感谢!