【问题标题】:Finishing a triangle with loops用循环完成一个三角形
【发布时间】:2013-05-09 03:07:52
【问题描述】:

我正在尝试用循环在 Java 中制作一个看起来像这样的右侧三角形:

     +
    /|
   / |
  /  |
 /   |
+----+

程序需要将 args 作为 int 来确定三角形每个边的大小。现在这是我的代码:

public static void main(String[] args) {
    int x = Integer.parseInt(args[0]);
        for (int i = 0; i <= x; i++) {
            for (int j = x; j >= i; j--) {
                System.out.print(" ");
            }
            System.out.println("/");
        }

    System.out.print("+");
    for (int j = 0; j < x; j++) {
        System.out.print("-");
    }
    System.out.print("+");
}

到目前为止的结果是这样的

     /
    /
   /
  /
 +---+

那么我应该如何处理呢?我尝试了一些 for 循环的组合,但到目前为止,它经常打印出乱七八糟的形状而不是实际的三角形。

【问题讨论】:

  • 因为 /| 在同一行中,您只是缺少在同一语句中打印 | ,但两者之间有空格。计算出您需要多少个空格并将它们添加到您的 /| 之间。

标签: java for-loop geometry


【解决方案1】:

您就快到了:在您打印'/' 的嵌套循环中,将println 替换为print。添加第二个循环,打印x-j 空格,然后打印|。最后,在进入第一个循环之前添加一条打印+的语句。就是这样!

要优化您的代码,请考虑编写一个辅助方法:

void printN(String str, int numTimes) {
    // Prints numTimes copies of str
}

这样您就可以将多个循环“淹没”到一个printN 调用中。例如,

for (int j = x; j >= i; j--) {
    System.out.print(" ");
}

会变成

printN(" ", x-i);

【讨论】:

    【解决方案2】:

    要为管道符号获得正确数量的空格,您需要再添加一个 for 循环。

    在这个 for 循环中,您将设置迭代计数器等于您的外部循环迭代计数器。然后在 for 循环中,您将使用 String Builder。在每个循环中,您将向字符串生成器添加一个空格。然后,一旦添加了最后一个空格,您将把 / 放在空格中,并将 |最后。

    对于一个明显的学校问题,我会给出最多的答案。唯一的学习方法是做朋友。

    【讨论】:

      【解决方案3】:
      public static void main(String[] args) {
          int x = Integer.parseInt(args[0]);
          for (int j = x+1; j >= 0; j--) {
              System.out.print(" ");
          }
          System.out.println("+");
          for (int i = 0; i <= x; i++) {
              for (int j = x; j >= i; j--) {
                  System.out.print(" ");
              }
              System.out.print("/");
              for (int k = 0; k < i; k++) {
                  System.out.print(" ");
              }
              System.out.println("I");
          }
      
          System.out.print("+");
          for (int j = 0; j < x+1; j++) {
              System.out.print("-");
          }
          System.out.print("+");
      }
      

      【讨论】:

      • 我不明白为什么有人降级了。它工作正常。至少发表评论
      • 不是我的反对意见,但是稍微解释一下怎么样?你的回答很不透明。我的感觉是,Doh 不是在寻找施舍——他对开悟感兴趣。
      • 我明白了!感谢您的反馈。当我写完代码想复制解释的时候,我注意到其他人提到他必须简单地使用 print 来打印 / 所以我认为我的代码会是互补的。再次感谢您的反馈,Michael。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多