在这个高级站点上很难提出这样的新手问题。但是经过如此多的尝试,甚至失去了希望,我被迫将自己带到这里。我无法打印以下图案:

                    1
                1   2   1
            1   2   4   2   1
        1   2   4   8   4   2   1
    1   2   4   8   16  8   4   2   1
1   2   4   8   16  32  16  8   4   2   1


但经过我的不懈努力,我实现了以下目标:

public static void main(String[] args) {
    int num = 1;
    for (int i = 0; i < 15; i++) {
        for (int j = 0; j < 15 - i; j++) {
            System.out.print(" ");
        }
        for (int k = 0; k <= i; k++) {
            System.out.print(num + " ");
        }
        System.out.println();
    }
}


           1
          1 1
         1 1 1
        1 1 1 1
       1 1 1 1 1
      1 1 1 1 1 1
     1 1 1 1 1 1 1
    1 1 1 1 1 1 1 1
   1 1 1 1 1 1 1 1 1
  1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1

最佳答案

你去

public static void main(String[] args) {
    int max = 6;
    int padLength = (int) Math.ceil(Math.log10(Math.pow(2, max) + 1)) + 2;
    for (int i = 0; i < max; i++) {
        for (int j = 1; j < max - i; j++) {
            System.out.print(pad(" ", padLength));
        }
        for (int k = 0; k <= i; k++) {
            System.out.print(pad(Math.pow(2, k), padLength));
        }
        for (int k = i - 1; k >= 0; k--) {
            System.out.print(pad(Math.pow(2, k), padLength));
        }
        System.out.println();
    }
}

public static String pad(double d, int l) {
    Integer i = (int) d;
    return pad(i.toString(), l);
}

public static String pad(String s, int l) {
    return String.format("%-" + l + "s", s);
}


说明

int padLength = (int) Math.ceil(Math.log10(Math.pow(2, max) + 1)) + 2;

Math.pow(2,max)-给我我必须显示的最大数量

Math.ceil(Math.log10(number + 1))-我用它来确定特定number的字符串表示形式的长度。 Please refer to wikipedia to check what logarithm is.当数字是10的精确幂时,我将1跳过边缘情况。 log10(10)->1(这绝对不会在有问题的指定任务中发生,仅是为了解决问题)。 Ceil只是四舍五入。

+2-指定两个数字之间的最小间距示例为2个空格,所以我只添加了这个

您可以在这里使用Integer.toString(((int)Math.pow(2, max))).length()+2,但它不是那么漂亮:)

return String.format("%-" + l + "s", s);

首先我建立格式字符串,例如%-3s,表示打印的最小长度为3的String,在右侧填充。第二个参数是我要打印的字符串。请参阅documentation

Running example

07-24 09:47
查看更多