java打印可对齐的任意层数的杨辉三角形

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zjluocisoftstone/article/details/50758171
package 打印杨辉三角;

/**
 * 
 * @author zjluoc
 *
 */
public class YangHuiTriangle {
	public static void main(String args[]) {
		printYangHuiTriangle(15);
	}

	/**
	 * 打印对应层数lines的杨辉三角形
	 * 
	 * @param lines
	 *            层数
	 */
	public static void printYangHuiTriangle(int lines) {
		// 首先定义一个二维数组用于存储每一层对应行列的数值
		long a[][] = new long[lines][lines];
		// 接着定义每一层首位和末尾均为1,此处for循环给边界赋值“1”。
		for (int i = 0; i < lines; i++) {
			a[i][0] = a[i][i] = 1;
		}
		// 接着计算从第三层开始那些由肩部两端相加的和
		for (int i = 2; i < lines; i++) {// 控制层从第三层到最后一层,2~lines-1
			for (int j = 1; j < i; j++) {// 每一层除去首尾2个数,只有(i+1)-2个数需要计算,说明j最大值为i-1
				// 计算肩部数字之和
				a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
			}
		}
		// 进行到这里已经计算好了每层的数字,现在下面开始对其进行塑造三角形形状
		int printSpaceNumber[] = countSpaceLength(a);
		for (int i = 0; i < lines; i++) {
			// 打印能居中对齐的空格
			for (int k = 0; k < printSpaceNumber[i]; k++) {
				System.out.print(" ");
			}
			for (int j = 0; j <= i; j++) {
				System.out.print(a[i][j] + "         ");
			}
			// 每层之后换行
			System.out.println();
		}

	}

	private static int[] countSpaceLength(long[][] a) {
		int numberLenthSum = 0;
		int spaceLenthSum = 0;
		int stringlength[] = new int[a.length];// 存储计算出来的每一层数字字符串+" "的字符长度
		for (int i = 0; i < a.length; i++) {
			for (int j = 0; j <= i; j++) {
				// 计算每层数字转换为字符串后长度之和
				numberLenthSum += String.valueOf(a[i][j]).length();
			}
			// 计算该一层空格长度之和
			spaceLenthSum = (i + 1) * ("         ").length();
			// 将该一层的字符串长度赋值给length[]最后一位
			stringlength[i] = numberLenthSum + spaceLenthSum;
			// 再次累积前需要清零
			numberLenthSum = spaceLenthSum = 0;
			// System.out.println("第"+(i+1)+"层总长为:"+stringlength[i]);
		}
		// 现在需要动态计算每一层前面空格数量
		int printSpaceNumber[] = new int[a.length];
		for (int i = 0; i < stringlength.length; i++) {
			//计算每一层以最低层居中所需的空格数量
			printSpaceNumber[i] = (stringlength[stringlength.length - 1] - stringlength[i]) / 2;
			// System.out.println("第"+(i+1)+"层需要打印的空格数量为:"+printSpaceNumber[i]);
		}
		return printSpaceNumber;
	}

}

这是打印10层的杨辉三角截图:

附上完整eclipse代码包下载地址:http://download.csdn.net/detail/zjluocisoftstone/9446388


猜你喜欢

转载自blog.csdn.net/zjluocisoftstone/article/details/50758171