一、前言

既然是实现杨辉三角,就要知道什么是杨辉三角。如下图,就是两种杨辉三角。

(1)等边形状的杨辉三角

(2)直角形状的杨辉三角

在知道这两种都是杨辉三角之后,我们就来实现利用java语言打印出杨辉三角。

二、杨辉三角的规律

第n行有n个数字.

每一行的开始和结尾数字都为1.

用二维数组表示就是a[i][0]=1;  a[i][j]=1(当i==j时);

第n+1行的第i个数字等于第n行的i-1个数字加上第n行的i个数字。

用二维数组表示就是a[i+1][j]=a[i][j-1]+a[i][j];

三、代码部分

3.1、创建一个长度为10,宽度为10的二维数组,但赋值和输出时只输出杨辉三角那个范围的数

首先,我们得理解定义一个长度和高度都为10的二维数组时,他到底做了什么。

public class Test {

public static void main(String[] args) {

int [][] arr=new int [10][10];

for(int i=0;i

for(int j=0;j

System.out.print(arr[i][j]+"\t");

}

System.out.println();

}

}

}

输出图:

数组的图为可以看出,实际是给每个位置上都赋值为0;

而我们要做的是给A部分的位置赋值并且输出,而B部分的位置不用管。

A部分与B部分的区别在于:A部分的横坐标大于等于纵坐标。用数组中的话就是i<=j;知道要赋值的范围,那么for循环的语句就知道了啦,就为

for(int i=0;i

for(int j=0;j<=i;j++) {

}

}

第一种该方法完整代码:

public class YHSJ {

public static void main(String[] args) {

//定义了一个长度为10,高度为10的二维数组,数组中的值都为0;

int[][] arr=new int[10][10];

for(int i=0;i

//由于只是给杨辉三角内的位置赋值,所以是j<=i

for(int j=0;j<=i;j++) {

//根据规律,使用if else 赋值

if(j==0||j==i) {

arr[i][j]=1;

}else {

arr[i][j]=arr[i-1][j-1]+arr[i-1][j];

}

/*由于只是输出杨辉三角范围内的值,所以在内层循环就输出,这种方法不能全部赋值完之后再输出

"\t"的原因是10和小于10的数组的宽度不同,所以使用\t制表符能使数与数之间距离相等

*/

System.out.print(arr[i][j]+"\t");

}

System.out.println();

}

}

}

对应效果图:

3.2、直接创建一个和杨辉三角形状一样的数组再赋值输出

在前面我们使用了一个长10高10的数组,但是最后我们只用了它的A部分,思考一下,为什么我们不直接创建一个和前面那个A部分形状一样的数组呢?

形状如下图:

知道基本的概念之后,我们先创建该数组,首先可以确定的是这里的高度还是为10,也就是横坐标最大还是为10,但是纵坐标就是小于等于该行的横坐标。

int[][] arr=new int[10][];

for(int i=0;i

arr[i]=new int[i+1];

}

在数组创建好之后,再就是赋值了,之前赋值用的是j<=i,但是此处数组的范围就是杨辉三角的范围,所以可以直接对数组进行内外两层循环。

for(int i=0;i

for(int j=0;j

}

}

而赋值的代码也是一样,不过这种方法就可以赋值完再输出,不用像第一种一样赋值时输出。

第二种方法完整代码:

public class YHSJ_2 {

public static void main(String[] args) {

int[][] arr=new int[10][];

for(int i=0;i

arr[i]=new int[i+1];

}

for(int i=0;i

for(int j=0;j

if(j==0 || i==j) {

arr[i][j]=1;

}else {

arr[i][j]=arr[i-1][j]+arr[i-1][j-1];

}

}

}

for(int i=0;i

for(int j=0;j

System.out.print(arr[i][j]+"\t");

}

System.out.println();

}

}

}

第二种补充说明:这里用这种是输出的一个直角三角形,但是在最后输出的时候加上一段就可以变成等腰三角形了;(但是由于制表符的问题,还是有一些不规范,觉得不好参考第三种)

public class YHSJ_2 {

public static void main(String[] args) {

int[][] arr=new int[10][];

for(int i=0;i

arr[i]=new int[i+1];

}

for(int i=0;i

for(int j=0;j

if(j==0 || i==j) {

arr[i][j]=1;

}else {

arr[i][j]=arr[i-1][j]+aarr[i-1][j-1];

}

}

}

for(int i=0;i

int num=(arr.length-i)/2;

for(int k=0;k<=num;k++) {

System.out.print("\t");

}

for(int j=0;j

System.out.print(arr[i][j]+"\t");

}

System.out.println();

}

}

}

3.3、接下来为大家介绍一种等边三角形输出的简单方法

代码:

public class YHSJ_1 {

public static void main(String[] args) {

int rows = 10;

for (int i = 0; i < rows; i++) {

int number = 1;

// 打印空格字符串

System.out.format("%" + (rows - i) * 2 + "s", "");

for (int j = 0; j <= i; j++) {

System.out.format("%4d", number);

number = number * (i - j) / (j + 1);

}

System.out.println();

}

}

}

重点在于那个number=number*(i-j)/(j+1),掌握了杨辉三角的作用。而关于System.out.format是一种类似于C语言中的输出,查看API即可知。

效果图:

java 杨辉三角_JAVA实现杨辉三角的三种方式相关推荐

  1. java base64 编码 类_java base64编码和解码的三种方式 | 学步园

    方式一:使用commons-codec.jar /** * @param bytes * @return */ public static byte[] decode(final byte[] byt ...

  2. java反射获取实体类_java 反射获取类对象的三种方式

    Java反射经常用到的就是获取对象中的属性,那么Java获取类对象就是必不可少的啦! Java实体类: public class ReflexModel { private String code; ...

  3. springboot:java实现邮件及附件发送、HTML正文的三种方式(一)【附带源码】

    0. 引言 邮件发送是我们日常开发中比较常见的功能,常用于预警信息提醒.统计数据定期发送等需求.一般该方法会由前人封装好,实际开发时只需要调用即可,但具体怎么实现的,如何从零实现邮件发送,这是我们要掌 ...

  4. 对Java多线程编程的初步了解,实现多线程的三种方式以及多线程并发安全的线程同步机制

    什么叫进程?什么叫线程? 进程相当于一个应用程序,线程就是进程中的一个应用场景或者说是一个执行单元,一个进程可以启动多个线程,每个线程执行不同的任务,一个线程不能单独存在,他必须是进程的一部分,当进程 ...

  5. java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...

  6. java 字符终端库_Java 字符终端上获取输入三种的方式分享

    在java 字符终端上获取输入有三种方式: 1.java.lang.system.in (目前jdk版本均支持) 2.java.util.scanner (jdk版本>=1.5) 3.java. ...

  7. java中map类型_Java中Map类型遍历的两种方式对比

    Java中Map类型是存储键值对数据的类型,在编程过程经常使用,进行遍历操作对于每个Java程序员都不会模式,下面总结两种常用的遍历方式(一种keySet,一种entrySet),通过对比让你明白使用 ...

  8. java跳出for循环_Java跳出多层for循环的4种方式

    Java跳出多层for循环的4种方式 一.使用return关键字控制 for (int i = 0;i<10;i++){ for (int j = 0; j<10; j++) { if ( ...

  9. java中遍历集合_java中遍历ArrayList集合的四种方式

    ArrayList遍历:取出ArrayList集合中的数据 方式一:for循环 方式二:增强for循环:foreach 方式三:Iterator:迭代器 方式四:ListIterator:双向迭代器 ...

  10. web java获取当前时间_Java 获取当前系统时间的三种方法

    准备工作: import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; 方式一: /** ...

最新文章

  1. 数字语音信号处理学习笔记——语音信号的数字模型(2)
  2. iOS开发日记4-第三方登录(ShareSDK)
  3. input函数的基本使用
  4. 复制Oracle表的结构
  5. ICCV 2019丨基于跨视角信息融合的三维人体姿态估计
  6. AutoCompleteExtender智能扩展实例
  7. 实践 | 在MySql中,这四种方法可以避免重复插入数据!
  8. 黑苹果16g内存够用吗_现阶段最便宜的完美黑苹果配置是什么?
  9. 益智小游戏(app)
  10. 高通QFIL烧录错误求解
  11. 在Node.js中了解Hello World
  12. oracle := 和=,oracle中 =: 和 := 分别是什么意思?
  13. iOS签名校验那些事儿
  14. Apache PdfBox 2.0.X 版本解析PDF文档(文字和图片)
  15. 14-5 food poisoning
  16. 计算机无法与打印机建立,电脑无法与打印机连接 计算机网考题目2(6)
  17. 全新2022测算系统完整版+支持对接结
  18. PB中的timer事件
  19. 阿里云是如何实现云视频直播的?
  20. 亚洲小姐全球总冠军吴丹,《猎枭生死线》荧幕初吻超越柳岩徐冬冬

热门文章

  1. ECMAScript6 Proxy和Reflect 对象操作拦截以及自定义
  2. Python实现基于ClipCap的看图说话Image Caption模型
  3. jQuery类似QQ空间时间轴效果_事件展示时光轴js特效代码
  4. Centos7与Windows查看硬盘序列号
  5. java4android 教程_《Java4Android视频教程》学习笔记(三)
  6. 小说大纲模板在计算机的哪里,如何撰写小说大纲
  7. Pygame实战:牛,几千行代码实现《机甲闯关冒险游戏》,太牛了(保存起来慢慢学)
  8. 新一代HTAP数据库崛起,MySQL生态的最佳归宿?
  9. Visio画UML用例图
  10. 每日一题/002/微积分/变上限积分函数求导问题