居中打印杨辉三角形
前提须知
函数接口:仅包含一个抽象方法的接口。
Lambda表达式就是函数式接口的一个实现类。
Function<T, R>表示一个参数返回一个结果,结果类型和参数类型不同,
定义了apply()方法,带一个参数,返回一个值。
Consumer< T >带一个参数不返回结果的操作,
定义accept(),接收参数。
参考:Java语言程序设计(第3版)
实现代码
package com.bjsxt.stream;
import java.util.Arrays;
import java.util.function.Consumer;
import java.util.function.Function;
public class YanghuiTriangle {
public static void main(String[] args) {
int i, j;
int level = 10;
int triangle[][] = new int[level][];
for (i = 0; i < triangle.length; i++)
triangle[i] = new int[i + 1];
triangle[0][0] = 1;
triangle[1][1] = 1;
for (i = 1; i < triangle.length; i++) {
triangle[i][0] = 1;
for (j = 1; j < triangle[i].length - 1; j++) {
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];// 杨辉三角的特点
triangle[i][triangle[i].length - 1] = 1;
}
}
// 居中打印
Function<Integer, String> spacer = (count) -> {
//将每行输出对应数量的空格作为一个函数赋给变量spacer
StringBuilder sb = new StringBuilder();
for (int k = 0; k < count; k++) {
sb.append(" ");
}
return sb.toString();
};
int max = 50;
Consumer<String> printCentered = (input) -> {
//由accept接收的数组的长度,决定空格的个数
int length = input.length();
String spaces = spacer.apply((max - length) / 2);//应用spacer的函数
System.out.println(spaces + input);//输出空格+内容
};
for (int k = 0; k < level; k++) {
printCentered.accept(Arrays.toString(triangle[k]));
}
}
}
测试结果
杨辉三角:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]