gpt4 book ai didi

Java:打印数字金字塔的改进,对齐和反转

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:15:04 24 4
gpt4 key购买 nike

注意 1:我已经有了蛮力、冗长、循环困惑的代码。
注 2:寻找更优雅的方式来建立它 - “更少”的行数和巧妙的逻辑。注3:不是作业,我是一个正在努力提高的爱好者。

要编码的函数:

printNumericPyramid(int depth, String alignment, String orientation);

深度:+ve 整数到 4
对齐方式:“左”/“右”之一
方向:“直立”/“倒置”之一

0 永远在顶点,无论是直立还是倒立
0259/9520 永远是金字塔的高度。


示例调用和预期输出:

printNumericPyramid(4, "left", "inverted");

9876
543.
21..
0...

printNumericPyramid(4, "right", "upright");

...0
..12
.345
6789

printNumericPyramid(4, "right", "inverted");

6789
.345
..12
...0


printNumericPyramid(4, "left", "upright");

0...
21..
543.
9876

如果“更少”的行数成为所提议解决方案的重点,那就太好了。不是通过删除所有换行符:),而是通过最小化代码(即使它会损害可读性)。

最佳答案

(首先请注意,您的方法定义容易出错:如果一个参数只能采用两个值,您可以使用 boolean 值而不是字符串。如果您拼错了“left”或“right”或“inverted”或“直立”,你的方法会工作但会产生错误的结果)

如果您想关注较少的行,那么您不应该重复自己,您可以使用三元运算符和可用的 Java API。

可以基于非常“智能”且完全不可读的代码在以下类型的循环中编写一个非常短的解决方案:

   public void printNumericPyramid( final int depth, final String alignment, final String orientation ) {
for (int i = 0; i < depth; i++) {
for (int j = 0; j < depth; j++) {
System.out.print ( ... ) // insert some smart hackery in here computing if we should print 0-9 or '.'
}
System.out.println();
}
}

然而,这最终可能不会那么容易阅读,而且很容易弄错逻辑。

所以我写了另一个解决方案:

  • 在每个字符处打印下一个值(从 0 到 9)打印一个点“.”。

  • 当一行“完成”时,我要么添加该行,要么反转该行,具体取决于对齐参数的值。

  • 如果要求逆向表示,可以简单的逆向集合

    public void printNumericPyramid( final int depth, final String alignment, final String orientation ) {
    final List<String> l1 = new ArrayList<String>();
    for (int i = 0, c = 0; i < depth; i++) {
    final StringBuilder sb = new StringBuilder();
    for (int j = 0; j < depth; j++) {
    sb.append( j >= depth - (i + 1) ? c++ : "." );
    }
    l1.add("left".equals(alignment) ? sb.reverse().toString() : sb.toString());
    }
    if ( "inverted".equals(orientation) ) Collections.reverse(l1);

    for ( final String s : l1 ) {
    System.out.println( s );
    }
    }

关于Java:打印数字金字塔的改进,对齐和反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8203223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com