【问题标题】:Print triangle with width and height parameters打印带宽度和高度参数的三角形
【发布时间】:2019-04-25 19:01:18
【问题描述】:

我对编程和 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

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

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

【问题讨论】:

  • 我会说,在你的第一个例子中,宽度是 11,高度是 8。我说的对吗?
  • 是的,你是对的。问题已编辑。
  • 我们如何用伪代码来模拟期望的结果?我们需要一个程序,它在顶层绘制一个星号,在随后的每个层次上加上两个星号。它应该在其他任何地方画一个句点。
  • 要注意有height和width参数。这意味着我们不能在每个级别添加两个星号。如果是这样,一个参数就足够了。但事实并非如此。让我解释一下三角形 11 8 示例输出:它从顶部的 1 个星号开始,但看到第二行有 2 个星号,第三行有 4 个星号,依此类推。这里的重点是必须有11个星号,在三角形的末端总共有8行。增加多少星号并不重要。您应该在增加星号的同时保持三角形形状。

标签: java loops


【解决方案1】:

您的代码正在做一些与您的示例不匹配的事情。

首先,您根本没有使用参数。您说假设 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");
    }
}

请注意,这可能无法准确打印结果,但应该看起来足够接近。如果您需要准确,您可能需要稍微调整一下比率。

【讨论】:

  • 不要只是粘贴你的想法作为答案,你必须确定你在说什么。我已经运行了这段代码,它甚至没有接近解决方案
  • @ZainArshad - 好电话。我已经更新了它。不过,公平地说,说它甚至不接近解决方案是不准确的。如果更多地作为伪代码是正确的。问题是编译和转换错误,所以更好的特征是它很接近,但只需要一些清理才能正常工作。话虽这么说,你说得对,我应该花更多的时间来确保它在发布之前有效。
  • 如果这个答案现在可以正确解决问题,请点赞/接受。
猜你喜欢
  • 2012-08-09
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
相关资源
最近更新 更多