二维数组
package day3;
//1
//11
//121
//1331
//14641
//15101051
//yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j]
public class text3 {
public static void main(String[] args){
int yanghui[][]=new int[10][];
//初始化二维数组
for(int i=0;i<yanghui.length;i++){
yanghui[i]=new int[i+1];
}
for(int i=0;i<yanghui.length;i++){
for (int j=0;j<yanghui[i].length;j++){
if(j==0||j==yanghui[i].length){
yanghui[i][0]=yanghui[i][i]=0;
}
else{
yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j];
}
}
}
for(int i=0;i<yanghui.length;i++){
for(int j=0;j<yanghui[i].length;j++){
System.out.print(yanghui[i][j]+" ");
}
System.out.println();
}
}
}
杨辉三角形:
public static void main(String[] args) {
//从控制台读取将要输入的数字,
Scanner sc = new Scanner(System.in);
System.out.print("请输入杨辉三角的层数:");
int n = sc.nextInt();//n是杨辉三角的层数
//定义一个nxn的二维数组用于存储杨辉三角中每个位置的值
int[][] yanghui = new int[n][n];
// 初始化第一列和对角线上的值
for (int i = 0; i < n; i++) {
yanghui[i][0] = 1;//第一列的值全是1
yanghui[i][i] = 1;//对角线上的值全是1
}
// 计算每个数的值
for (int i = 2; i < n; i++) {//从第二行开始循环,循环n-1次
for (int j = 1; j < i; j++) {//从第1列开始循环,循环i-1次,因为第i行只有i-1列
yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j]; //第i行第j列的值=第i-1行第j-1列的值+第i-1行第j列的值,
}
}
// 输出杨辉三角
for (int i = 0; i < n; i++) {//共n行,循环n次
for (int j = 0; j <= i; j++) {//第i行有i,所以循环i次,比如,第一行有1列
System.out.print(yanghui[i][j] + " ");//输出一个值,以空格隔开
}
System.out.println();//每输出完一行数字后换行,继续输出下一行
}
}
运行结果:
在java中允许不规则数组存在,也就是第一行可以有3个元素,第二行有10个...
//int[][] arr = new int[][3];错误,java中不允许省略行
//原因:因为arr.length的长度是行的个数,因此不能省略
int[][] arr = new int[3][];//正确,java中可以省略列
也是因为java中允许省略列的原因,造就了它允许有不规则数组的存在。
由于没有分配列个数,因此array中的三个元素array[0]、array[1]、array[2]都是null,因此在使用array[i].length时就会包空指针异常,