二维数组
1、二维数组
数组中的数组:二维数组[][]
int[] arr= new int[3];//一维数组
int[][] arr=new int[3][4];//定义了名称为arr的二维数组,二维数组中有3个一维数组。每一个一维数组中有4个元素。
//3是二维数组的长度,4是每一个二维数组中一维数组的长度。
int[][] arr=new int[2][3];
int[1][2]=78;
int[0][3]=90;//错误。角标越界,超出了范围。
system.out.println(arr);//打印[[I@17164。两个[[说明打印二维数组的地址
system.out.println(arr[0]);//打印[I@1fb8ee3。一个[说明一维数组,打印的是一维数组的地址。
system.out.println(arr][0][0]);//打印0
运行结果:
运行结果:
二维数组的初始化过程:
int[][] arr=new int[3][];
system.out.println(arr);//打印[[I@de6ced。两个[[说明打印二维数组地址的值。
system.out.println(arr[0]);//打印null。二维数组存的3个一维数组,[0],[1],[2]的初始化值默认为null。
system.out.println(arr[0][0]);//打印NullPointerException。由于arr[0]为null,通过它获取一维数组角标为0的元素肯定会报空指针异常错误!
int[][] arr=new int[3][];
arr[0]=new int[3];
arr[1]=new int[1];
arr[2]=new int[2];
system.out.println(arr.length);//打印的是二维数组的长度3;
system.out.println(arr[0].length);//打印的是二维数组中第一个一维数组的长度3
具体过程参考下图:
需求:求二维数组元素的和。
大圈套小圈,用for语句实现。
int[][] arr={{3,5,1,7},{2,3,5,8},{6,1,0,2}}
int sum=0;
for(int x=0;x<arr.length;x++)
{
for(int y=0;y<arr[x].length;y++)
{
sum=sum+arr[x][y];
}
}
system.out.println("sum="+sum);
2、二维数组练习
int[] x; intx[];//这两种定义方式是可以的。
int[][] y; inty[][]; int[] y[];//这3种定义也是可以的。
int[] x,y[];//x一维,y二维。
对应:
int[] x;
int[] y[];
请问下面的表达式是否正确:
x[0]=y;//error错的,x一维,y二维。
y[0]=x;//yes对的
y[0][0]=x;//错。二维数组不对应一维数组。
x[0][0]=y;//错。x根本不是二维数组。
y[0][0]=x[0];//对。元素给元素赋值。
x=y;//错。