// //输入指定的行数,打印杨辉三角 // //每一个数等于它上方两数之和。 //每行数字左右对称,由1开始逐渐变大。 //第n行的数字有n项。 // // // //可从打印菱形的思想出发:????? // 存在问题: 随着行数的增长,数字增大,占用空间增大,慢慢变得不“对称”。 package com.day16; import java.util.Scanner; public class testYangHuiSanJiao{ public static Scanner Sc =new Scanner(System.in); //初始化行数组,是每一行数组第一元素为1; public static int[][] inital(int [][] ary){ for( int i=0;i<=ary.length-1;++i){ ary [i] = new int [i+1]; //每行元素个数本等于行数i, //但注意到 数组是从 0 开始的,故行数组初始化为[i+1]的大小 ary[i][0]=1;//首元素初始化为1; ary[i][i]=1; //末元素初始化为1; } int row,colum; for(row = 2;row <= ary.length-1;row++){ //前两行初始化已完成,从第三行开始 for(colum = 1;colum < row;colum++){ //每一行数组第一个元素(下标为0)已初始化为1, //从第二个元素(下标为1)开始 //末元素已初始化为1,故column < row ; ary[row][colum]=ary[row-1][colum-1]+ary[row-1][colum]; } } // //Check row ary[][] // // for(int i = 0; i<=ary.length-1;i++){ // for(int j = 0; j<=i;j++){ //初始化大小决定 j<=i // System.out.print(ary[i][j]+" "); // } // System.out.println(); // // } // //测试经过,初始化正确; return ary; } public static void prtyhsj (int [][] ary){ int cbkn= ary.length-0 ; for(int row = 0;row <= ary.length-1;row++){ //每行首先打印相应的空格; for(int i = cbkn ; i > 0;i--){ System.out.print(" "); } //在打印相应行数组的元素+空格; for(int col = 0;col <= row; col++){ System.out.print(ary[row][col]); System.out.print(" "); } //打印后续对称连续空格 for(int i = cbkn;i > 0;i--){ System.out.print(" "); } cbkn--; System.out.println();//一行打印结束执行换行 } } public static void main (String [] args){ System.out.println("Please input row:"); int rownum = Sc.nextInt(); System.out.println("Printing "+rownum+" row YHSJ"); //定义二维数组,第一维为行数组,并初始化 int [][] rowary = new int [rownum][] ; inital(rowary); prtyhsj(rowary); } }