【问题标题】:How Can I Make Perfect Acute Triangle with for loop?如何用 for 循环制作完美的锐角三角形?
【发布时间】:2014-06-11 06:55:35
【问题描述】:

只是为了玩,我尝试编写一个程序,这样我就可以使用 for 循环制作一个锐角三角形,所以我的输出将是这样的:

                 0
                1  1
               2  2  2
              3  3  3  3
             4  4  4  4  4
            5  5  5  5  5  5
           6  6  6  6  6  6  6
          7  7  7  7  7  7  7  7
         8  8  8  8  8  8  8  8  8
        9  9  9  9  9  9  9  9  9  9

但是当我想要超过 10 个时,我的锐角三角形会变得像这样:

                 0
                1  1
               2  2  2
              3  3  3  3
             4  4  4  4  4
            5  5  5  5  5  5
           6  6  6  6  6  6  6
          7  7  7  7  7  7  7  7
         8  8  8  8  8  8  8  8  8
        9  9  9  9  9  9  9  9  9  9
       10  10  10  10  10  10  10  10  10  10  10


12           12           12           12           12           12           12           12           12           12           12           12           12

我的代码如下

public class Triangel {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        for (int i = 20; i > 0; i--) {
            for (int j = i - 1; j > 0; j--) {
                System.out.print(" ");
            }
            for (int k = 20; k > i - 1; k--) {
                if (i =< 9) {
                    System.out.print("           " + (20 - i));
                } else if (i > 9) {
                    System.out.print( "  "+(20 - i));
                }
            }
            System.out.println();
        }
    }
}

当我想在 9 点之后打印时,知道如何使它成为完美的锐角三角形吗?

注意:我认为 if 语句会有所帮助,但似乎没有。

【问题讨论】:

  • 这个你真的应该可以自己考虑。
  • 创造差异的只是印刷方式。您可以放置​​更多空格字符,使其看起来像一个锐角三角形。
  • 屏幕中的每个数字都被限制在特定数量的像素内。当您想要一个大于 9 的数字时,意味着您使用的是 2 位数字,那么这个协议就被打破了,所以输出中没有对称性。那么你的预期是什么?
  • @Eypros 你看到我的 if 语句部分了吗?

标签: java for-loop


【解决方案1】:

只需更改内部 for 循环:这里是 k=i-1,因为您正在检查 i&gt;9i&lt;9,因此将排除 11。 我猜你正在尝试管理两位数和一位数之间的空格。但是你可以只对i&lt;=10 使用单空格,对i&gt;10 使用双空格

       for (int k = 20; k > i - 1; k--) {
            if (i <= 10) {
                System.out.print(" "+(20 - i));//Single Space
            } else if (i > 10) {
                System.out.print("  "+(20 - i));//Double Space
            }
        }

注意:这个三角形可能看起来有点奇怪

【讨论】:

  • 谢谢你,我稍后看看。你能说出你的意思吗 这个三角形可能看起来有点奇怪?你觉得我的方法怎么样?
【解决方案2】:

如果您要打印单个数字,您可以在每个数字之后放置一个空格以匹配两位数的长度。这样你就可以去99了。

在更大范围内应用此方法仅意味着您必须在主循环之前进行检查,这将告诉您最大数字有多长,如果数字较短,则用空格补偿长度差异。

【讨论】:

  • 个位数是什么意思?
  • @kickbuttowski 单个数字是 0-9 双是 10-99 等等.. 数字的字符长度
【解决方案3】:

应该使用任意数量的行。虽然没有测试过数千。

public static void main(String[] args) {
    int maxRows = 14;
    int spaces = String.valueOf(maxRows).length();

    for (int i = 1; i <= maxRows; i++) {            // for each row
        for (int j = 1; j <= maxRows - i; j++) {    // add spaces to the left
            for (int l = 1; l <= spaces; l++) {     // according to number of digits
                System.out.print(" ");
            }
        }
        for (int k = 1; k <= i; k++) {              // for each column
            System.out.print(i);
            for (int l = String.valueOf(i).length(); l <= spaces * 2 - 1; l++) {    // add spaces inbetween
                System.out.print(" ");
            }
        }
        System.out.print(System.getProperty("line.separator"));
    }
}

【讨论】:

  • 谢谢你。我稍后会看看。你能不能也运行我的代码并告诉我发生了什么?
  • 在您的 if 语句中,您缺少案例 i == 9。这就是为什么它写一个空行。还有什么想知道的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多