首先我们回答昨天给大家留的问题,为何在添加数值确定位置后,将该位置及位置以后的元素依次向后移动一位是通过倒过来的循环的方式呢?答案很简单,从前往后移动的话,后面的位置上的数字会重复,大家可通过下面的代码理解一下。
接下来我们进入今天整理的内容,二维数据,首先我们来看看二维数据的定义,这里和上面的一维数组形式差不多,我们来看看。
1.声明:
int[ ][ ] arr;
2.分配空间
int[ ][ ] arr = new int[ 长度1 ][ 长度2 ];
3.赋值
int[ ][ ] arr = new int[ ][ ] {{...},{....},{....},{.........},..........};
int[ ][ ] arr = {{...},{....},{...},{.....},........};
这里可有看到,二维数组实际上和一维数组差不多,通过一个简单的例子来快速了解一下
我们将一维数组和二维数组放在一块,是不是能够发现,实际上二维数组就是将一维数组中的元素换成了一个一维数组,再回头对比看一下二维数组的分配空间,是不是能够 理解后面的长度1和长度2代表声明,长度1代表最外面的{ }中包含的数组有多少个,而长度2就是代码里面的每个数组里面包含的元素的个数。
这里我们要注意,在赋值的时候,不是每个数组的长度都相等
int[ ][ ] arr = {{0,1,2},{3,5},{9,7,1,0},{7}}
这里通过赋值我们可有看到,长度2的长度在赋值的时候可有不一样,这与一维数组一样,因此,在赋值的时候,不写数组的长度,系统会根据元素个数,默认分配空间。接下来我们来看一个例题:
大家看到这个的时候,有没有想到之前我们在循环里面学的通过双重循环输出图形,这个是不是很相似,外层循环控制行数,内存循环控制列数,可有看到这个图形的行数是不是3,列数也是3,继续往下看
int[ ][ ] arr = { {1,4,7},{2,5,8},{3,6,9} };
这里我们定义一个数组并赋值,首先,我们来看一下arr[0][2]这个二维数组元素,指向的是那个具体的数值,首先我们把它看成一个一位数组,arr[0]就代表是第一个元素,这里的第一个元素就是{1,4,7},我们再来看arr[0][2],是不是就是这个第一个元素中下标为2的那个元素,也就是说arr[0][2]这个值就是7。以此类推,可以得到arr[1][0]就是{2,5,8}里的第一个元素,也就是2。
我们可有看到数组的长度1和长度2都是3,是不是和行数以及列数相似,因此我们也可以通过双重for循环来进行输出,这里我们通过双重for循环就可以完成二维数组的遍历,外层for循环控制行数,这里是三行,也是我们的数组长度arr.length,内存循环控制列数,这里的列数实际上就是里面的数组的长度,我们用arr[i].length表示