java,新手,向大家请教一下这段代码中注释部分怎么正确理解?

public class 程序33 {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
System.out.println("杨辉三角");
System.out.println("请输入一个数字代表行数:");
int n=in.nextInt();
** int[][] arr=new int[n][];**//二维数组
if(n>=3){
for(int i=0;i<n;i++){
** arr[i]=new int[i+1];**//又new了个一维数组
arr[i][0]=arr[i][i]=1;
for(int j=1;j<i;j++){
arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
}
}
}
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}

你可以理解为arr是一个数组的数组,它的每个元素是一个数组。
所以下面需要对它的元素先初始化,然后才能把值放进去。

程序删掉8个*号可以跑,但是要输入大于等于3的值才行,小于3的会报错。
你可以输入一个2试试,这样你就理解二维数组的初始化了。
第一行注释是声明arr二维数组的第一维长度,声明了这个并不能真正的为数组开辟空间,因此如果第二维没有初始化,则会报空指针异常,比如输入数字2;
第二行注释是为arr开辟空间,有了这个就能往数组里存放数据了。

这注释有和没有根本没有区别嘛。

先创建一个n行的二维数组,后面是对每一行创建一个一维数组,指定每一行元素的个数。Java中的二维数组每行的个数可以不同

** int[][] arr=new int[n][];**//二维数组 你这一句可以理解为创建了一个有N行的数组,每一行有多少个元素还没确定。
** arr[i]=new int[i+1];**//又new了个一维数组 这一句是指在第I行那里定义这一行有I+1个元素定义完之后那个数组就会这样显示
※ 第一行底标是0 所以有1个元素
※※
※※※
※※※※
※※※※※
※※※※※※

这样就定义了一个二维数组