使用宽度和高度参数打印三角形

时间:2019-04-25 19:01:18

标签: java loops

我对编程和Java很陌生。我需要针对宽度和高度参数打印一个星号和点三角形。

到目前为止,我只能用一个参数(高度)打印星号三角形。 (假设给函数6作为参数)

这是我的代码:

public static void main(String[] args)
  {
   for(int i=0; i<6; i++)
    {
       for(int j=6; j>=i; j--)
       {
          System.out.print(".");
       }
       for(int x=0; x<=(2*i); x++)
       {
          System.out.print("*");
       }
       for(int k=6; k>=i; k--)
       {
          System.out.print(".");
       }
     System.out.print("\n");
    }
 }

我想给函数两个参数(宽度和高度)。但是,我无法管理添加第二个参数。

预期输出为(使用宽度-11-和高度-8-参数):

triangle 11 8

.....*.....
....**.....
...****....
...*****...
..******...
.********..
.*********.
***********

但是,我得到以下输出(带有一个仅高度为-6-的参数):

triangle 6

.......*.......
......***......
.....*****.....
....*******....
...*********...
..***********..

能帮我吗?如何在函数中添加第二个参数并解决问题? 非常感谢你!

1 个答案:

答案 0 :(得分:0)

您的代码执行的某些操作与您的示例不匹配。

首先,您根本没有使用参数。您说要假设6作为参数传递给您的main方法,但我所看到的只是代码中的硬编码6。您应该调用args [0]和args [1]来使用两个参数。

第二,如果要获得示例中提供的参数给出的结果,则循环逻辑关闭。您的外循环适用于行数,但是内循环不能正确构建单独的行。这里最棘手的部分是每行的内容都需要考虑宽度与高度的比率。

这是一个应解决这两个问题的示例:

public static void main(String[] args) {
   int width = Integer.parseInt(args[0]);
   int height = Integer.parseInt(args[1]);

   for(int i=0; i<height; i++) {
       int starsThisLine = (int) Math.round(width * ((i+1) / (double) height));
       int dotsBeforeStars = (int) Math.round((width - starsThisLine) / 2.0);

       for(int j=0; j<width; j++)
       {
          if (j < dotsBeforeStars)
             System.out.print(".");
          } else if  (j < dotsBeforeStars + starsThisLine) {
             System.out.print("*");
          } else {
             System.out.print(".");
          }
       }
     System.out.print("\n");
    }
}

请注意,这可能无法完全打印出结果,但看起来应该足够接近。如果需要精确,可能需要稍微调整比例。