一些话
我是栀芷,是一个在读的java小白,这是我的第一篇博客,希望成为我写博客习惯的起点,大家也不要太嫌弃啦。今天也是看一个朋友发表文章才兴起写一下博客,很感谢这个偶然,加油。
杨辉三角
言归正传,今天我写的也是杨辉三角,让我们一步一步来看看吧。
得到杨辉三角
首先,我们要从控制台输入一个数,作为杨辉三角的行数.
Scanner sc = new Scanner(System.in);
System.out.println("请输入想要打印的行数");
int n = sc.nextInt();
第二步,我们写一个getTriangle()函数来得到杨辉三角的每个元素。由于杨辉三角,每行元素的个数等于它的行数,于是我们用for循环来创建一个二维数组,先把两端的位置填入1,按照下面的数等于上面两个数之和的规律1,我们可以计算出中间元素的值,再填入。
public static int[][] getTriangle(int n) {
int[][] array = new int[n][n];
for (int i = 0; i < array.length; i++) {
array[i][0] = array[i][i] = 1;
if (i > 1) {
for (int j = 1; j < array[i].length - 1; j++) {
array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
}
}
}
return array;
}
输出杨辉三角
第三步,为了杨辉三角对称的输出且成金字塔形,我们首先想到的是用空格输出来得到想要的结果。
最开始直接用两个和一个空格嵌套使用输出,对于10以内的看不出明显的问题,但对于10以后,中间数的位数多了,导致空格后移,后面的数不再能保持格式。
我们就想到了先计算最大的数的位数,然后来匹配空格的长度,避免数字过长,空格过多的情况。
public static void show(int[][] array) {
int row;
row = array.length;
String space1 = "";
String max = String.valueOf(array[row - 1][row / 2]);//可以最大数的长度
for (int m = 0; m < max.length(); m++) { //得到最大数相应的空格长度
space1 += " ";
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < row - 1 - i; j++) { //先打印好杨辉三角左边的空格
System.out.print(space1 + " ");
}
for (int j = 0; j <= i; j++) {//再打印数字之间的空格
String space2 = "";
String num = String.valueOf(array[i][j]);//可以得到当前的数字的长度
for (int a = 0; a <= (max.length() - num.length()); a++) {
//得到当前数字对应空格的长度,比最大数短多少,就补多少空格
space2 += " ";
}
System.out.print(array[i][j] + space1 + space2 + " ");
}
System.out.println();
}
}
主函数
直接在类中调用**getTriangle()函数和show()**函数,输出想要的结果。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入想要打印的行数");
int n = sc.nextInt();
show(getTriangle(n));
}
运行图
拜拜下次见。emmmm代码还有很多不规范的地方,还有注释的质量会慢慢改正和提高的。
杨辉三角的规律的话,建议度娘哦,我这里解释起来也太冗余啦,见谅。 ↩︎