【Java案例】打印杨辉三角
时间:2022-05-04
本文章向大家介绍【Java案例】打印杨辉三角,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
图1.10 杨辉三角形
案例分析
观察杨辉三角形的图案,可以发现其中的规律:三角形的竖边和斜边都是“1”,三角形里面的任意一个数字正好等于它正上方的数字和左上角的数字两个数字之和。第几行就有几个数字,可以把它补充成如图1.11所示效果。
图1.11 方阵
方阵(行列相等的矩阵)大家都很熟悉了,可以通过二维数组来处理方阵,一个双重循环就能实现,外循环控制行数,内循环控制列来完成方阵内数字的计算和存储。
案例实现
1
确定程序框架
由前面的问题分析可知,先从键盘接收杨辉三角的高度,然后通过二维数组计算存储杨辉三角,最后把杨辉三角打印出来。程序框架代码如下:
public class Ch1_5
{
public static void main(String[] args)
{
System.out.print("请输入行数:");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt(); //键盘接收行数
int[][] ary = getTriangle(num); //得到杨辉三角
print(ary); //打印杨辉三角
}
}
2
得到杨辉三角
由前面的问题分析可知,用二维数组计算存储杨辉三角,杨辉三角竖边、斜边都为1,可以先赋值,然后再给中间元素赋值,当前位置的值等于它的上方数和左上角上的数之和。程序代码如下:
private static int[][] getTriangle(int num)
{
int[][] ary = new int[num][num]; //用二维数组存储
for(int i = 0; i < ary.length; i++) //竖边、斜边置1
{
ary[i][0] = 1;
ary[i][i] = 1;
}
for(int i = 1; i < ary.length; i++) //外循环控制行数
{
for(int j = 1; j <= i; j++) //内循环控制列
{
//里面部分,等于当前位置的上方和左上角之和
ary[i][j] = ary[i-1][j-1] + ary[i-1][j];
}
}
return ary;
}
3
打印杨辉三角
杨辉三角保存在二维数组中,通过一个双重循环就可以打印出来,但是要注意的是,不需要把所有元素都打印出来,内循环列的控制要小于等于当前行数。程序代码如下:
private static void print(int[][] ary)
{
for(int i=0;i<ary.length;i++) //外循环控制行
{
for(int j=0;j<=i;j++) //内循环控制列
{
System.out.printf(" %-3d", ary[i][j]);
}
System.out.println(); //换行
}
}
4
完整程序
现在我们就需要把刚才的程序进行组合,构成我们的完整程序:
import java.util.Scanner;
public class Ch1_5
{
public static void main(String[] args)
{
System.out.print("请输入行数:");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt(); //从键盘接收行数
int[][] ary = getTriangle(num); //得到杨辉三角
print(ary); //打印杨辉三角
}
//得到杨辉三角
private static int[][] getTriangle(int num)
{
int[][] ary = new int[num][num]; //用二维数组存储
for(int i = 0; i < ary.length; i++) //竖边、斜边置1
{
ary[i][0] = 1;
ary[i][i] = 1;
}
for(int i = 1; i < ary.length; i++) //外循环控制行
{
for(int j = 1; j <= i; j++) //内循环控制列
{
//里面部分,等于当前位置的上方和左上角之和
ary[i][j] = ary[i-1][j-1] + ary[i-1][j];
}
}
return ary;
}
private static void print(int[][] ary)
{
for(int i=0;i<ary.length;i++) //外循环控制行
{
for(int j=0;j<=i;j++) //内循环控制列
{
System.out.printf(" %-3d", ary[i][j]);
}
System.out.println(); //输出换行
}
}
}
5
运行程序
运行程序,结果如图1.12所示。
图1.12 程序输出结果
扩展训练
图1.12输出的杨辉三角是直角三角形,能不能输出等腰三角形呢?答案是肯定的。等腰三角形类似于前面的金字塔图案,参考前面介绍的思路,不难输出等腰三角形。
(1)参考代码
import java.util.*;
public class Ch1_5_2
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in); //获取控制台输入对象
System.out.print("请输入行号: ");
int m = in.nextInt(); //从键盘接收输入
int n=2*m-1; //列元素个数
int arr[][]=new int[m][n];
for(int i=0;i<m;i++) //外循环控制行
{
for(int j=0;j<n;j++) //内循环控制列
{
if(j<(m-i-1)||(j>=(m+i))) //输出等腰三角形两边空格
System.out.print(" ");
else if((j==(m-i-1))||(j==(m+i-1)))
//计算并输出等腰三角形两个腰
{
arr[i][j]=1;
System.out.printf("%-3d",arr[i][j]);
}
else if((i+j)%2==0&&m%2==0||(i+j)%2==1&&m%2==1)
//中间默认数字0用空格替换
System.out.print(" ");
else //计算并输出中间数字
{
arr[i][j]=arr[i-1][j-1]+arr[i-1][j+1];
System.out.printf("%-3d",arr[i][j]);
}
}
System.out.println(); //输出换行
}
}
}
(2)运行结果
运行程序,结果如图1.13所示。
图1.13 程序输出结果
- nuget服务器搭建,以及如何发布一个Nuget包
- knockoutjs 上自己实现的flux
- 简单实现 C# 与 Javascript的兼容
- Oozie分布式工作流——从理论和实践分析使用节点间的参数传递
- 如何写好CSS系列之表单(form)
- 2017年Dataversity 最受欢迎文章 Top 20 榜单
- “自如”获40亿融资,组合域名用的妙
- D3、openlayers的一次尝试
- 对快速排序算法的分析
- 如何写好css系列之button
- Oozie分布式工作流——Action节点
- mockjs,json-server一起搭建前端通用的数据模拟框架
- Oozie分布式工作流——流控制
- C++命名规则
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- AttributeError: 'list' object has no attribute 'keys'
- raise ValueError("Cannot convert {0!r} to Excel".format(value))
- ImportError: cannot import name 'Process' from 'multiprocessing'
- mac卸载mysql
- 不可错过的Webpack核心知识点
- APP+Web混合全局版的几种布署方法
- 关于合并pdf文件出现的问题
- Python中的with是测试常用到的资源打开利
- python批量运行py文件
- beautifulsoup的使用
- PWN:House Of Einherjar
- 2.用Python套用Excel模板,一键完成原亮样式
- Vmware Centos7 配置静态 ip 和 使宿主机和虚拟机互相 ping 通
- Hadoop安装成功之后,访问不了web界面的50070端口怎么解决?
- 2.1 注释