在这个高级站点上很难提出这样的新手问题。但是经过如此多的尝试,甚至失去了希望,我被迫将自己带到这里。我无法打印以下图案:
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
,在右侧填充。第二个参数是我要打印的字符串。请参阅documentationRunning example