我需要编写一个打印pascal三角形的Java代码。这就是我到现在所做的。
import java.util.Scanner;
class Pascal {
static int bnk (int n, int k) {
if (k==0 || k==n) {
return 1;
} // B(n,k) Berechnung für Standardwert = 1;
else {
int x = (bnk(n-1, k-1) + bnk(n-1, k));
return x;
} // Berechnung aller sonstigen B(n,k)-Werte.
} // Berechnung von B(n,k)
public static void main (String [] args) {
Scanner sc = new Scanner(System.in);
System.out.println("How many rows?: ");
int r = sc.nextInt();
sc.close();
for (int n=0; n<r; n++) {
for (int j=0; j<(r-n); j++) {
System.out.print(" ");
} // Setzt Anzahl Leerzeichen vor erster Zahl
for (int k=0; k<=n; k++) {
int b = bnk(n,k);
System.out.print(b+" ");
} // Berechnet in jeder Reihe alle Elemente
System.out.println();
} // Berechnet Reihe nach Reihe
} // main
} // class Pascal
第一种方法计算三角形中所需的值。 第二个通过打印(r-n)空白打印行的三角形。 n代表当前行,r代表行的总数。 因此,三角形的左侧以正确的方式打印,但问题是,当三角形中的值变得太高时,三角形在右侧变形。 我希望我所描述的是可以理解的。你能帮我找到一种正确格式化三角形的方法吗?
当前输出如下:
5行:https://gyazo.com/d9a536d3ac92c155707ebb2e4ee7745b
答案 0 :(得分:4)
因此您可以使用"\t"
进行格式化,而不是使用1,然后使用2.然后您可以每1个空格或每2个空格分隔数字,允许第一个(顶部)空间位于第二个2,并重复。
答案 1 :(得分:2)
简单的解决方案:
计算要显示的最大位数,在案例3中为126.然后,使用此空间量显示每个数字,并使用前导或尾随空格填充它。
更复杂的解决方案,可能不会更好,具体取决于您的口味:
给出n行数字
1 9 36 84 126 126 84 36 9 1
因此,positions_n将被设置为0,2,4,7,10,14,18,21,24,26(如果我没有错误)
1,3,6,12,16,20,23,25
问题当然是我们在需要回合时会跳起来看起来很糟糕。此外,数字之间的间距可能会变得奇怪和不均匀。